!function (A) {
	function g(t) {
		if (e[t])return e[t].exports;
		var C = e[t] = {exports: {}, id: t, loaded: !1};
		return A[t].call(C.exports, C, C.exports, g), C.loaded = !0, C.exports
	}
	
	var t = window.webpackJsonp;
	window.webpackJsonp = function (e, I) {
		for (var i, n, o = 0, a = []; o < e.length; o++)n = e[o], C[n] && a.push.apply(a, C[n]), C[n] = 0;
		for (i in I)A[i] = I[i];
		for (t && t(e, I); a.length;)a.shift().call(null, g)
	};
	var e = {}, C = {1: 0};
	return g.e = function (A, t) {
		if (0 === C[A])return t.call(null, g);
		if (void 0 !== C[A])C[A].push(t); else {
			C[A] = [t];
			var e = document.getElementsByTagName("head")[0], I = document.createElement("script");
			I.type = "text/javascript", I.charset = "utf-8", I.async = !0, I.src = g.p + "" + ({
					0: "wdata",
					2: "cdata"
				}[A] || A) + ".js?4be2f0bbcb2831c3fdf8", e.appendChild(I)
		}
	}, g.m = A, g.c = e, g.p = "./impublic/built/", g(0)
}({
	0: function (A, g, t) {
		(function (A, g) {
			t(35), t(38), t(37), t(25), t(2), t(36);
			var e, C, I, i, n = t(34), o = t(30), a = t(33), r = t(32), s = t(31), c = t(3), h = t(4), l = A.extend({}, A.Events, {
				init: function () {
					var A = this;
					switch (i = $("#bgm")[0], c.init(), c.ups.v) {
						case"canvas":
							e = o;
							break;
						case"webgl":
							e = n;
							break;
						default:
							e = c.webgl ? n : o
					}
					e.on("ready", function () {
						A.ready(), h.ga(h.PAGE, "Home", "Homepage")
					}), e.on("dot", function (A) {
						switch (A) {
							case 1:
								h.ga(h.EVENT, "Tmall-Btn", "Fashion");
								break;
							case 2:
								h.ga(h.EVENT, "Tmall-Btn", "AI");
								break;
							case 3:
								h.ga(h.EVENT, "Tmall-Btn", "New-life");
								break;
							case 4:
								h.ga(h.EVENT, "Tmall-Btn", "Brand-Carnival");
								break;
							case 5:
								h.ga(h.EVENT, "Tmall-Btn", "Buy");
								break;
							case 6:
								h.ga(h.EVENT, "Tmall-Btn", "Red-Packets");
								break;
							case 7:
								h.ga(h.EVENT, "Tmall-Btn", "Stepped");
								break;
							case 8:
								h.ga(h.EVENT, "Tmall-Btn", "Live");
								break;
							case 9:
								h.ga(h.EVENT, "Tmall-Btn", "Carnival-Night");
								break;
							case 10:
								h.ga(h.EVENT, "Tmall-Btn", "11")
						}
						a.popOn(A)
					}), e.on("share", function () {
						window.ua.ali || window.ua.weixin ? a.shareOn() : c.shareToWeibo(), h.ga(h.EVENT, "Tmall-Btn", "To-Share")
					}), e.on("preloadOn", function () {
						a.preloadOn()
					}), e.on("preloadProgress", function (A) {
						a.preloadProgress(A)
					}), e.on("preloadOff", function () {
						a.preloadOff()
					}), r.on("item", function (A) {
						switch (A) {
							case 1:
								h.ga(h.EVENT, "Tmall-Nav", "Fashion");
								break;
							case 2:
								h.ga(h.EVENT, "Tmall-Nav", "AI");
								break;
							case 3:
								h.ga(h.EVENT, "Tmall-Nav", "New-life");
								break;
							case 4:
								h.ga(h.EVENT, "Tmall-Nav", "Brand-Carnival");
								break;
							case 5:
								h.ga(h.EVENT, "Tmall-Nav", "Buy");
								break;
							case 6:
								h.ga(h.EVENT, "Tmall-Nav", "Red-Packets");
								break;
							case 7:
								h.ga(h.EVENT, "Tmall-Nav", "Stepped");
								break;
							case 8:
								h.ga(h.EVENT, "Tmall-Nav", "Live");
								break;
							case 9:
								h.ga(h.EVENT, "Tmall-Nav", "Carnival-Night");
								break;
							case 10:
								h.ga(h.EVENT, "Tmall-Nav", "11")
						}
						e.toDot(A), a.popOn(A)
					}), r.on("share", function () {
						window.ua.ali || window.ua.weixin ? a.shareOn() : c.shareToWeibo(), h.ga(h.EVENT, "Tmall-Nav", "To-Share")
					}), r.on("muteOn", function () {
						i.pause()
					}), r.on("muteOff", function () {
						i.play()
					}), r.on("vr", function () {
						c.isVR ? a.tipOn(1) : a.tipOn(2), A.resize()
					}), a.on("introOff", function () {
						"VR_Package" == c.ups.utm_source && "tmall_vr" == c.ups.utm_campaign && "Qrcode" == c.ups.utm_medium && r.vrOff()
					});
					var t = $("#main");
					t.on("touchmove", function () {
						return !1
					}), r.init(t), a.init(t), e.init(t), C = $("canvas"), g.set(C, {
						transformOrigin: "0% 0%",
						position: "absolute"
					}), s.init(C), $(window).on("resize", function () {
						A.resize()
					}), e.animate(), I = new Orienter, I.orient = function (A) {
						c.checkLandscape() ? (c.isReady && (e.aim.z = c.limiter(5 * -A.lat)), e.fix.x = 0, e.fix.y = 0) : c.isVR ? (c.isReady && (e.aim.z = c.limiter(5 * -A.lat)), e.fix.x = 0, e.fix.y = 0) : (e.fix.y = .004 * c.limiter(45 + A.lat, 45), e.fix.x = .004 * c.limiter(A.g, 100))
					}, I.change = function () {
						c.checkLandscape() ? (h.ga(h.EVENT2, "Device Orientation", "Change", "Landscape"), r.out(), a.tipOn(1)) : (h.ga(h.EVENT2, "Device Orientation", "Change", "Portrait"), c.isVR ? a.tipOn(1) : a.tipOn(2), r["in"]())
					}, I.init(), document.addEventListener("WV.Event.APP.Background", function () {
						c.isActive = !1, r.isMute && i.pause()
					}, !1), document.addEventListener("WV.Event.APP.Active", function () {
						c.isActive = !0, r.isMute && i.play()
					}, !1), document.addEventListener("WV.Event.APP.Lock", function () {
						c.isActive = !1, r.isMute && i.pause()
					}, !1), c.checkLandscape() ? h.ga(h.EVENT2, "Device Orientation", "Landing", "Landscape") : h.ga(h.EVENT2, "Device Orientation", "Landing", "Portrait")
				}, ready: function () {
					this.playBgm(), r["in"](), s.on(s.START, function () {
						c.checkLandscape() || c.isVR || g.kill(e.root.position)
					}), s.on(s.MOVE, function (A) {
						c.checkLandscape() || c.isVR || (g.kill(e.aim), e.aim.z = c.limiter(1 * A.dy))
					}), s.on(s.END, function (A) {
						h.ga(h.EVENT, "Slide", "Slide")
					}), s.on(s.TAP, function (A) {
						c.checkLandscape() || c.isVR || (g.kill(e.aim), g.to(e.aim, .5, {z: 0, ease: g.Quad.Out}), e.tap(A))
					}), a.introOn()
				}, resize: function () {
					e.resize(), c.checkLandscape() ? g.set(C, {
						rotation: 0,
						left: 0
					}) : c.isVR ? (I.changeDirectionTo(90), g.set(C, {
						rotation: 90,
						left: window.innerWidth
					})) : (I.changeDirectionTo(0), g.set(C, {rotation: 0, left: 0}))
				}, playBgm: function () {
					var A = function () {
						i.play(), $("body").off("touchend", A)
					};
					$("body").on("touchend", A), i.play()
				}
			});
			l.init()
		}).call(g, t(1), t(2))
	}, 1: function (A, g, t) {
		var e, C;
		(function (I) {/*!
		 * VERSION: 0.2.0
		 * DATE: 2015-03-31
		 * GIT:https://github.com/shrekshrek/bone
		 *
		 * @author: Shrek.wang, shrekshrek@gmail.com
		 **/
			!function (i) {
				var n = "object" == typeof self && self.self == self && self || "object" == typeof I && I.global == I && I;
				e = [t(25), g], C = function (A, g) {
					n.Bone = i(n, g, A)
				}.apply(g, e), !(void 0 !== C && (A.exports = C))
			}(function (A, g, t) {
				var e = A.Bone, C = [].slice;
				g.VERSION = "0.2.0", g.$ = t, g.noConflict = function () {
					return A.Bone = e, this
				};
				var I = function (A) {
					return "function" == typeof A || !1
				}, i = function (A, g, t) {
					var e = null == A ? void 0 : A[g];
					return void 0 === e && (e = t), I(e) ? e.call(A) : e
				}, n = function (A) {
					return Function.prototype.bind.apply(A, C.call(arguments, 1))
				};
				g.bind = n;
				var o = function (A) {
					var g = arguments.length;
					if (2 > g || null == A)return A;
					for (var t = 1; g > t; t++)for (var e = arguments[t], C = a(e), I = C.length, i = 0; I > i; i++) {
						var n = C[i];
						A[n] = e[n]
					}
					return A
				};
				g.extend = o;
				var a = function (A) {
					var g = [];
					for (var t in A)g.push(t);
					return g
				}, r = function (A) {
					return null == A ? 0 : void 0 !== A.length ? A.length : a(A).length
				}, s = function (A) {
					return null == A || (void 0 !== A.length ? 0 === A.length : 0 === a(A).length)
				}, c = 0, h = function (A) {
					var g = ++c + "";
					return A ? A + g : g
				}, l = g.Events = {}, u = /\s+/, d = function (A, g, t, e, C) {
					var I, i = 0;
					if (t && "object" == typeof t) {
						void 0 !== e && "context" in C && void 0 === C.context && (C.context = e);
						for (I = a(t); i < I.length; i++)g = A(g, I[i], t[I[i]], C)
					} else if (t && u.test(t))for (I = t.split(u); i < I.length; i++)g = A(g, I[i], e, C); else g = A(g, t, e, C);
					return g
				};
				l.on = function (A, g, t) {
					return p(this, A, g, t)
				};
				var p = function (A, g, t, e, C) {
					if (A._events = d(f, A._events || {}, g, t, {context: e, ctx: A, listening: C}), C) {
						var I = A._listeners || (A._listeners = {});
						I[C.id] = C
					}
					return A
				};
				l.listenTo = function (A, g, t) {
					if (!A)return this;
					var e = A._listenId || (A._listenId = h("l")), C = this._listeningTo || (this._listeningTo = {}), I = C[e];
					if (!I) {
						var i = this._listenId || (this._listenId = h("l"));
						I = C[e] = {obj: A, objId: e, id: i, listeningTo: C, count: 0}
					}
					return p(A, g, t, this, I), this
				};
				var f = function (A, g, t, e) {
					if (t) {
						var C = A[g] || (A[g] = []), I = e.context, i = e.ctx, n = e.listening;
						n && n.count++, C.push({callback: t, context: I, ctx: I || i, listening: n})
					}
					return A
				};
				l.off = function (A, g, t) {
					return this._events ? (this._events = d(E, this._events, A, g, {
						context: t,
						listeners: this._listeners
					}), this) : this
				}, l.stopListening = function (A, g, t) {
					var e = this._listeningTo;
					if (!e)return this;
					for (var C = A ? [A._listenId] : a(e), I = 0; I < C.length; I++) {
						var i = e[C[I]];
						if (!i)break;
						i.obj.off(g, t, this)
					}
					return s(e) && (this._listeningTo = void 0), this
				};
				var E = function (A, g, t, e) {
					if (A) {
						var C, I = 0, i = e.context, n = e.listeners;
						if (g || t || i) {
							for (var o = g ? [g] : a(A); I < o.length; I++) {
								g = o[I];
								var s = A[g];
								if (!s)break;
								for (var c = [], h = 0; h < s.length; h++) {
									var l = s[h];
									t && t !== l.callback && t !== l.callback._callback || i && i !== l.context ? c.push(l) : (C = l.listening, C && 0 === --C.count && (delete n[C.id], delete C.listeningTo[C.objId]))
								}
								c.length ? A[g] = c : delete A[g]
							}
							return r(A) ? A : void 0
						}
						for (var u = a(n); I < u.length; I++)C = n[u[I]], delete n[C.id], delete C.listeningTo[C.objId]
					}
				};
				l.once = function (A, g, t) {
					var e = d(w, {}, A, g, n(this.off, this));
					return this.on(e, void 0, t)
				}, l.listenToOnce = function (A, g, t) {
					var e = d(w, {}, g, t, n(this.stopListening, this, A));
					return this.listenTo(A, e)
				};
				var w = function (A, g, t, e) {
					if (t) {
						var C = A[g] = function () {
							e(g, C), t.apply(this, arguments)
						};
						C._callback = t
					}
					return A
				};
				l.trigger = function (A) {
					if (!this._events)return this;
					for (var g = Math.max(0, arguments.length - 1), t = Array(g), e = 0; g > e; e++)t[e] = arguments[e + 1];
					return d(m, this._events, A, void 0, t), this
				};
				var m = function (A, g, t, e) {
					if (A) {
						var C = A[g], I = A.all;
						C && I && (I = I.slice()), C && v(C, e), I && v(I, [g].concat(e))
					}
					return A
				}, v = function (A, g) {
					var t, e = -1, C = A.length, I = g[0], i = g[1], n = g[2];
					switch (g.length) {
						case 0:
							for (; ++e < C;)(t = A[e]).callback.call(t.ctx);
							return;
						case 1:
							for (; ++e < C;)(t = A[e]).callback.call(t.ctx, I);
							return;
						case 2:
							for (; ++e < C;)(t = A[e]).callback.call(t.ctx, I, i);
							return;
						case 3:
							for (; ++e < C;)(t = A[e]).callback.call(t.ctx, I, i, n);
							return;
						default:
							for (; ++e < C;)(t = A[e]).callback.apply(t.ctx, g);
							return
					}
				};
				o(g, l);
				var V = g.Class = function () {
					this.initialize.apply(this, arguments)
				};
				o(V.prototype, l, {
					initialize: function () {
					}
				});
				var M = g.View = function (A) {
					this.cid = h("view"), A || (A = {});
					for (var g in R)A[R[g]] && (this[R[g]] = A[R[g]]);
					this._ensureElement(), this.initialize.apply(this, arguments)
				}, x = /^(\S+)\s*(.*)$/, R = ["el", "id", "attributes", "className", "tagName", "events"];
				o(M.prototype, l, {
					tagName: "div", $: function (A) {
						return this.$el.find(A)
					}, initialize: function () {
					}, render: function () {
						return this
					}, remove: function () {
						return this._removeElement(), this.stopListening(), this
					}, _removeElement: function () {
						this.$el.remove()
					}, setElement: function (A) {
						return this.undelegateEvents(), this._setElement(A), this.delegateEvents(), this
					}, _setElement: function (A) {
						this.$el = A instanceof g.$ ? A : g.$(A), this.el = this.$el[0]
					}, delegateEvents: function (A) {
						if (A || (A = i(this, "events")), !A)return this;
						this.undelegateEvents();
						for (var g in A) {
							var t = A[g];
							if (I(t) || (t = this[t]), t) {
								var e = g.match(x);
								this.delegate(e[1], e[2], n(t, this))
							}
						}
						return this
					}, delegate: function (A, g, t) {
						return this.$el.on(A + ".delegateEvents" + this.cid, g, t), this
					}, undelegateEvents: function () {
						return this.$el && this.$el.off(".delegateEvents" + this.cid), this
					}, undelegate: function (A, g, t) {
						return this.$el.off(A + ".delegateEvents" + this.cid, g, t), this
					}, _createElement: function (A) {
						return document.createElement(A)
					}, _ensureElement: function () {
						if (this.el)this.setElement(i(this, "el")); else {
							var A = o({}, i(this, "attributes"));
							this.id && (A.id = i(this, "id")), this.className && (A["class"] = i(this, "className")), this.setElement(this._createElement(i(this, "tagName"))), this._setAttributes(A)
						}
					}, _setAttributes: function (A) {
						this.$el.attr(A)
					}
				});
				var B = g.Router = function (A) {
					A || (A = {}), A.routes && (this.routes = A.routes), this._bindRoutes(), this.initialize.apply(this, arguments)
				}, y = /\((.*?)\)/g, b = /(\(\?)?:\w+/g, T = /\*\w+/g, Q = /[\-{}\[\]+?.,\\\^$|#\s]/g;
				o(B.prototype, l, {
					initialize: function () {
					}, route: function (A, t, e) {
						A = this._routeToRegExp(A), I(t) && (e = t, t = ""), e || (e = this[t]);
						var C = this;
						return g.history.route(A, function (I) {
							var i = C._extractParameters(A, I);
							C.execute(e, i, t) !== !1 && (C.trigger.apply(C, ["route:" + t].concat(i)), C.trigger("route", t, i), g.history.trigger("route", C, t, i))
						}), this
					}, execute: function (A, g) {
						A && A.apply(this, g)
					}, navigate: function (A, t) {
						return g.history.navigate(A, t), this
					}, _bindRoutes: function () {
						if (this.routes)for (var A, g = a(this.routes); null != (A = g.pop());)this.route(A, this.routes[A])
					}, _routeToRegExp: function (A) {
						return A = A.replace(Q, "\\$&").replace(y, "(?:$1)?").replace(b, function (A, g) {
							return g ? A : "([^/?]+)"
						}).replace(T, "([^?]*?)"), new RegExp("^" + A + "(?:\\?([\\s\\S]*))?$")
					}, _extractParameters: function (A, g) {
						var t = A.exec(g).slice(1), e = [];
						for (var C in t) {
							var I = t[C];
							e[C] = C === t.length - 1 ? I || null : I ? decodeURIComponent(I) : null
						}
						return e
					}
				});
				var D = g.History = function () {
					this.handlers = [], this.checkUrl = n(this.checkUrl, this), "undefined" != typeof window && (this.location = window.location, this.history = window.history)
				}, O = /^[#\/]|\s+$/g, H = /^\/+|\/+$/g, G = /#.*$/;
				D.started = !1, o(D.prototype, l, {
					atRoot: function () {
						var A = this.location.pathname.replace(/[^\/]$/, "$&/");
						return A === this.root && !this.getSearch()
					}, matchRoot: function () {
						var A = this.decodeFragment(this.location.pathname), g = A.slice(0, this.root.length - 1) + "/";
						return g === this.root
					}, decodeFragment: function (A) {
						return decodeURI(A.replace(/%25/g, "%2525"))
					}, getSearch: function () {
						var A = this.location.href.replace(/#.*/, "").match(/\?.+/);
						return A ? A[0] : ""
					}, getHash: function (A) {
						var g = (A || this).location.href.match(/#(.*)$/);
						return g ? g[1] : ""
					}, getPath: function () {
						var A = this.decodeFragment(this.location.pathname + this.getSearch()).slice(this.root.length - 1);
						return "/" === A.charAt(0) ? A.slice(1) : A
					}, getFragment: function (A) {
						return null == A && (A = this._usePushState || !this._wantsHashChange ? this.getPath() : this.getHash()), A.replace(O, "")
					}, start: function (A) {
						if (D.started)throw new Error("Bone.history has already been started");
						if (D.started = !0, this.options = o({root: "/"}, this.options, A), this.root = this.options.root, this._wantsHashChange = this.options.hashChange !== !1, this._hasHashChange = "onhashchange" in window, this._useHashChange = this._wantsHashChange && this._hasHashChange, this._wantsPushState = !!this.options.pushState, this._hasPushState = !(!this.history || !this.history.pushState), this._usePushState = this._wantsPushState && this._hasPushState, this.fragment = this.getFragment(), this.root = ("/" + this.root + "/").replace(H, "/"), this._wantsHashChange && this._wantsPushState) {
							if (!this._hasPushState && !this.atRoot()) {
								var g = this.root.slice(0, -1) || "/";
								return this.location.replace(g + "#" + this.getPath()), !0
							}
							this._hasPushState && this.atRoot() && this.navigate(this.getHash(), {replace: !0})
						}
						var t = window.addEventListener || function (A, g) {
								return attachEvent("on" + A, g)
							};
						return this._usePushState ? t("popstate", this.checkUrl, !1) : this._useHashChange && t("hashchange", this.checkUrl, !1), this.options.silent ? void 0 : this.loadUrl()
					}, stop: function () {
						var A = window.removeEventListener || function (A, g) {
								return detachEvent("on" + A, g)
							};
						this._usePushState ? A("popstate", this.checkUrl, !1) : this._useHashChange && A("hashchange", this.checkUrl, !1), this._checkUrlInterval && clearInterval(this._checkUrlInterval), D.started = !1
					}, route: function (A, g) {
						this.handlers.unshift({route: A, callback: g})
					}, checkUrl: function () {
						var A = this.getFragment();
						return A !== this.fragment && void this.loadUrl()
					}, loadUrl: function (A) {
						if (!this.matchRoot())return !1;
						A = this.fragment = this.getFragment(A);
						for (var g in this.handlers) {
							var t = this.handlers[g];
							if (t.route.test(A))return t.callback(A), !0
						}
					}, navigate: function (A, g) {
						if (!D.started)return !1;
						g && g !== !0 || (g = {trigger: !!g}), A = A.replace(G, "");
						var t = this.root;
						("" === A || "?" === A.charAt(0)) && (t = t.slice(0, -1) || "/");
						var e = t + A;
						if (A = this.decodeFragment(A.replace(G, "")), this.fragment !== A) {
							if (this.fragment = A, this._usePushState)this.history[g.replace ? "replaceState" : "pushState"]({}, document.title, e); else {
								if (!this._wantsHashChange)return this.location.assign(e);
								this._updateHash(this.location, A, g.replace)
							}
							return g.trigger ? this.loadUrl(A) : void 0
						}
					}, _updateHash: function (A, g, t) {
						if (t) {
							var e = A.href.replace(/(javascript:|#).*$/, "");
							A.replace(e + "#" + g)
						} else A.hash = "#" + g
					}
				}), g.history = new D;
				var q = function (A, g) {
					var t, e = this;
					t = A && Object.prototype.hasOwnProperty.call(A, "constructor") ? A.constructor : function () {
						return e.apply(this, arguments)
					}, o(t, e, g);
					var C = function () {
						this.constructor = t
					};
					return C.prototype = e.prototype, t.prototype = new C, A && o(t.prototype, A), t.__super__ = e.prototype, t
				};
				return B.extend = D.extend = V.extend = M.extend = q, g
			})
		}).call(g, function () {
			return this
		}())
	}, 2: function (A, g, t) {
		var e, C;
		(function (t) {/*!
		 * VERSION: 0.7.0
		 * DATE: 2016-8-17
		 * GIT:https://github.com/shrekshrek/jstween
		 *
		 * @author: Shrek.wang, shrekshrek@gmail.com
		 **/
			!function (I) {
				var i = "object" == typeof self && self.self == self && self || "object" == typeof t && t.global == t && t;
				e = [g], C = function (A) {
					i.JT = I(i, A)
				}.apply(g, e), !(void 0 !== C && (A.exports = C))
			}(function (A, g) {
				function t(A, g) {
					for (var t in g)A[t] = g[t]
				}
				
				function e(A, g) {
					if (A.length && A.length > 0)for (var t = 0; t < A.length; t++)g.call(A[t], t, A[t]); else g.call(A, 0, A)
				}
				
				function C(A) {
					return A.replace(/([A-Z])/g, "-$1").toLowerCase()
				}
				
				function I(A) {
					return A.replace(/\b(\w)|\s(\w)/g, function (A) {
						return A.toUpperCase()
					})
				}
				
				function i(A) {
					return Math.round(1e3 * A) / 1e3
				}
				
				function n(A) {
					return A ? S + I(A) : S
				}
				
				function o(A) {
					if (!A)throw"target is undefined, can't tween!!!";
					return "string" == typeof A ? "undefined" == typeof document ? A : document.querySelectorAll ? document.querySelectorAll(A) : document.getElementById("#" === A.charAt(0) ? A.substr(1) : A) : A
				}
				
				function a(A, g) {
					return "rotation" == g || "scale" == g ? g : void 0 !== A._jt_obj[g] ? g : void 0 !== A.style[g] ? g : (g = n(g), void 0 !== A.style[g] ? g : void 0)
				}
				
				function r(A, g, t, e) {
					var C = {};
					if (g instanceof Array) {
						C.num = [];
						for (var I in g) {
							var i = s(A, g[I]);
							C.num[I] = i.num, C.unit = i.unit
						}
						void 0 != t && (e ? C.num.push(t.num) : C.num.unshift(t.num))
					} else C = s(A, g);
					return C
				}
				
				function s(A, g) {
					var t = h(g);
					"rem" == A.unit && "rem" != t.unit ? (v(), A.num = i(A.num * z), A.unit = "px") : "rem" != A.unit && "rem" == t.unit && (v(), A.num = i(A.num / z), A.unit = "rem");
					var e;
					switch (t.ext) {
						case"+=":
							e = A.num + t.num;
							break;
						case"-=":
							e = A.num - t.num;
							break;
						default:
							e = t.num
					}
					return {num: e, unit: t.unit || A.unit}
				}
				
				function c(A) {
					void 0 == A._jt_obj && (A._jt_obj = {
						perspective: 0,
						x: 0,
						y: 0,
						z: 0,
						rotationX: 0,
						rotationY: 0,
						rotationZ: 0,
						scaleX: 1,
						scaleY: 1,
						scaleZ: 1,
						skewX: 0,
						skewY: 0
					})
				}
				
				function h(A) {
					var g = /(\+=|-=|)(-|)(\d+\.\d+|\d+)(e[+-]?[0-9]{0,2}|)(rem|px|%|)/i, t = g.exec(A);
					return t ? {num: i(t[2] + t[3] + t[4]), unit: t[5], ext: t[1]} : {num: 0, unit: "px", ext: ""}
				}
				
				function l(A) {
					return /\S\s+\S/g.test(A) || !/\d/g.test(A)
				}
				
				function u(A, g) {
					switch (g) {
						case"perspective":
						case"x":
						case"y":
						case"z":
						case"rotationX":
						case"rotationY":
						case"rotationZ":
						case"scaleX":
						case"scaleY":
						case"scaleZ":
						case"skewX":
						case"skewY":
							return A._jt_obj[g];
						case"rotation":
							return A._jt_obj.rotationZ;
						case"scale":
							return A._jt_obj.scaleX;
						default:
							return d(A, g)
					}
				}
				
				function d(A, g) {
					if (A.style[g])return A.style[g];
					if (document.defaultView && document.defaultView.getComputedStyle) {
						var t = C(g), e = document.defaultView.getComputedStyle(A, "");
						return e && e.getPropertyValue(t)
					}
					return A.currentStyle ? A.currentStyle[g] : null
				}
				
				function p(A, g, t) {
					switch (g) {
						case"perspective":
						case"x":
						case"y":
						case"z":
						case"rotationX":
						case"rotationY":
						case"rotationZ":
						case"scaleX":
						case"scaleY":
						case"scaleZ":
						case"skewX":
						case"skewY":
							return A._jt_obj[g] = t, !0;
						case"rotation":
							return A._jt_obj.rotationZ = t, !0;
						case"scale":
							return A._jt_obj.scaleX = t, A._jt_obj.scaleY = t, !0;
						default:
							return f(A, g, t), !1
					}
				}
				
				function f(A, g, t) {
					A.style[g] = t
				}
				
				function E(A) {
					return "object" == typeof A && 1 === A.nodeType
				}
				
				function w(A) {
					var g = "";
					A._jt_obj.perspective && (g += "perspective(" + A._jt_obj.perspective + ") "), (A._jt_obj.x || A._jt_obj.y || A._jt_obj.z) && (g += "translate3d(" + m(A._jt_obj.x) + "," + m(A._jt_obj.y) + "," + m(A._jt_obj.z) + ") "), A._jt_obj.rotationX && (g += "rotateX(" + A._jt_obj.rotationX % 360 + "deg) "), A._jt_obj.rotationY && (g += "rotateY(" + A._jt_obj.rotationY % 360 + "deg) "), A._jt_obj.rotationZ && (g += "rotateZ(" + A._jt_obj.rotationZ % 360 + "deg) "), (1 != A._jt_obj.scaleX || 1 != A._jt_obj.scaleY || 1 != A._jt_obj.scaleZ) && (g += "scale3d(" + A._jt_obj.scaleX + ", " + A._jt_obj.scaleY + ", " + A._jt_obj.scaleZ + ") "), (A._jt_obj.skewX || A._jt_obj.skewY) && (g += "skew(" + A._jt_obj.skewX + "deg," + A._jt_obj.skewY + "deg) "), A.style[n("transform")] = g
				}
				
				function m(A) {
					return A + ("number" == typeof A ? "px" : "")
				}
				
				function v() {
					j || (j = document.createElement("div"), j.style.cssText = "border:0 solid; position:absolute; line-height:0px;"), k || (k = document.getElementsByTagName("body")[0]), k.appendChild(j), j.style.borderLeftWidth = "1rem", z = parseFloat(j.offsetWidth), k.removeChild(j)
				}
				
				function V() {
					Y = !0;
					var A = P.length, g = N.length;
					if (0 === A && 0 === g)return void(Y = !1);
					var t = q(), e = t - F;
					F = t;
					for (var C = 0; A > C; C++) {
						var I = P[C];
						I && !I._update(e) && (I.isActive && (I.isActive = !1, P.splice(C, 1), I.onEnd && I.onEnd.apply(I, I.onEndParams)), C--, A--)
					}
					for (var i = 0; g > i; i++) {
						var n = N[i];
						n && !n._update(e) && (N.splice(i, 1), n.onEnd && n.onEnd.apply(n, n.onEndParams), i--, g--)
					}
					U(V)
				}
				
				function M() {
					this.initialize.apply(this, arguments)
				}
				
				function x(A, g) {
					var t = o(A), C = P.length;
					e(t, function (A, t) {
						for (var e = C - 1; e >= 0; e--) {
							var I = P[e];
							I.target === t && I[g]()
						}
					})
				}
				
				function R(A) {
					for (var g = P.length, t = g - 1; t >= 0; t--) {
						var e = P[t];
						e[A]()
					}
				}
				
				function B() {
					this.initialize.apply(this, arguments)
				}
				
				function y(A, g) {
					var t = A, C = N.length;
					e(t, function (A, t) {
						for (var e = C - 1; e >= 0; e--) {
							var I = N[e];
							I.onEnd === t && I[g]()
						}
					})
				}
				
				function b(A) {
					for (var g = N.length, t = g - 1; t >= 0; t--) {
						var e = N[t];
						e[A]()
					}
				}
				
				function T(A) {
					A.bezier && (Q(A, A.bezier), A.interpolation = O, delete A.bezier), A.through && (Q(A, A.through), A.interpolation = H, delete A.through), A.linear && (Q(A, A.linear), A.interpolation = D, delete A.linear)
				}
				
				function Q(A, g) {
					for (var t in g)for (var e in g[t])0 == t ? A[e] = [g[t][e]] : A[e].push(g[t][e])
				}
				
				function D(A, g) {
					var t = A.length - 1, e = t * g, C = Math.floor(e), I = W.Linear;
					return 0 > g ? I(A[0], A[1], e) : g > 1 ? I(A[t], A[t - 1], t - e) : I(A[C], A[C + 1 > t ? t : C + 1], e - C)
				}
				
				function O(A, g) {
					var t, e = 0, C = A.length - 1, I = Math.pow, i = W.Bernstein;
					for (t = 0; C >= t; t++)e += I(1 - g, C - t) * I(g, t) * A[t] * i(C, t);
					return e
				}
				
				function H(A, g) {
					var t = A.length - 1, e = t * g, C = Math.floor(e), I = W.Through;
					return A[0] === A[t] ? (0 > g && (C = Math.floor(e = t * (1 + g))), I(A[(C - 1 + t) % t], A[C], A[(C + 1) % t], A[(C + 2) % t], e - C)) : 0 > g ? A[0] - (I(A[0], A[0], A[1], A[1], -e) - A[0]) : g > 1 ? A[t] - (I(A[t], A[t], A[t - 1], A[t - 1], e - t) - A[t]) : I(A[C ? C - 1 : 0], A[C], A[C + 1 > t ? t : C + 1], A[C + 2 > t ? t : C + 2], e - C)
				}
				
				Date.now = Date.now || function () {
						return (new Date).getTime()
					};
				var G = Date.now(), q = function () {
					return Date.now() - G
				}, S = "";
				!function () {
					var A = document.createElement("div"), g = ["Webkit", "Moz", "Ms", "O"];
					for (var t in g)if (g[t] + "Transform" in A.style) {
						S = g[t];
						break
					}
				}();
				var k, j, z, U = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (A) {
						window.setTimeout(A, 1e3 / 60)
					}, P = [], Y = !1, F = 0;
				t(M.prototype, {
					initialize: function (A, t, e, C, I) {
						this.fromVars = e, this.curVars = {}, this.toVars = C, this.target = A, this.duration = 1e3 * Math.max(t, 0), this.ease = C.ease || g.Linear.None, this.delay = 1e3 * Math.max(C.delay || 0, 0), this.yoyo = C.yoyo || !1, this.repeat = this.curRepeat = Math.floor(C.repeat || 0), this.repeatDelay = 1e3 * Math.max(C.repeatDelay || 0, 0), this.onStart = C.onStart || null, this.onStartParams = C.onStartParams || [], this.onRepeat = C.onRepeat || null, this.onRepeatParams = C.onRepeatParams || [], this.onEnd = C.onEnd || null, this.onEndParams = C.onEndParams || [], this.onUpdate = C.onUpdate || null, this.onUpdateParams = C.onUpdateParams || [], this.isPlaying = C.isPlaying || !0, this.interpolation = C.interpolation || null, this.isActive = C.isActive || !0, this.isReverse = !1, this.isDom = I, this.curTime = 0, this.isStart = !1, this.startTime = this.delay, this.endTime = this.startTime + this.repeatDelay + this.duration, 0 != this.delay && (this._updateProp(), this.onUpdate && this.onUpdate.apply(this, this.onUpdateParams)), this.isActive && this._addSelf()
					}, _update: function (A) {
						if (!this.isPlaying)return !0;
						if (this.curTime += A, this.curTime < this.startTime)return !0;
						if (this.isStart || (this.curTime += this.repeatDelay), this.curTime < this.startTime + this.repeatDelay)return !0;
						if (this.curTime < this.endTime)this._updateProp(), this.onUpdate && this.onUpdate.apply(this, this.onUpdateParams); else {
							if (0 == this.curRepeat)return this._updateProp(), this.onUpdate && this.onUpdate.apply(this, this.onUpdateParams), this._checkStart(), !1;
							this.yoyo && (this.isReverse = !this.isReverse);
							var g = (this.curTime - this.endTime) % (this.duration + this.repeatDelay);
							0 == this.repeatDelay ? (this.curTime = this.startTime + g, this._updateProp()) : (this._updateProp(), this.curTime = this.startTime + g), this.onUpdate && this.onUpdate.apply(this, this.onUpdateParams), this.onRepeat && this.onRepeat.apply(this, this.onRepeatParams), this.curRepeat > 0 && this.curRepeat--
						}
						return this._checkStart(), !0
					}, _checkStart: function () {
						this.isStart || (this.isStart = !0, this.onStart && this.onStart.apply(this, this.onStartParams))
					}, _updateProp: function () {
						var A = 0 == this.duration ? 1 : (this.curTime - this.startTime - this.repeatDelay) / this.duration;
						A = Math.max(0, Math.min(1, A)), this.isReverse && (A = 1 - A);
						var g = this.ease(A), t = !1;
						for (var e in this.fromVars) {
							var C, I = this.fromVars[e], n = this.toVars[e];
							C = n.num instanceof Array ? this.interpolation(n.num, g) : I.num + (n.num - I.num) * g, C = i(C), this.curVars[e] = {
								num: C,
								unit: n.unit
							}, this.isDom ? (Math.abs(n.num - I.num) > 20 && (C = Math.round(C)), p(this.target, e, C + (n.unit || 0)) && (t = !0)) : this.target[e] = C + (n.unit || 0)
						}
						t && w(this.target)
					}, _toEnd: function () {
						var A = !1;
						for (var g in this.fromVars) {
							var t = this.toVars[g], e = i(t.num);
							this.curVars[g] = {
								num: e,
								unit: t.unit
							}, this.isDom ? p(this.target, g, e + (t.unit || 0)) && (A = !0) : this.target[g] = e + (t.unit || 0)
						}
						A && w(this.target)
					}, _addSelf: function () {
						this.isActive = !0, P.push(this), Y || (F = g.now(), V())
					}, _removeSelf: function () {
						this.isActive = !1;
						var A = P.indexOf(this);
						-1 !== A && P.splice(A, 1)
					}, active: function () {
						this._addSelf()
					}, play: function () {
						this.isPlaying = !0
					}, pause: function () {
						this.isPlaying = !1
					}, kill: function (A) {
						this._removeSelf(), A && (this._toEnd(), this.onEnd && this.onEnd.apply(this, this.onEndParams))
					}
				}), t(g, {
					get: function (A, g) {
						var t = o(A);
						if (void 0 !== t.length && (t = t[0]), E(t)) {
							c(t);
							var e = a(t, g);
							return e ? u(t, e) : null
						}
						return t[g]
					}, set: function (A, g) {
						var t = o(A);
						e(t, function (A, t) {
							if (E(t)) {
								c(t);
								var e = !1;
								for (var C in g) {
									var I = a(t, C);
									if (I)if (l(g[C]))p(t, I, g[C]); else {
										var i = r(h(u(t, I)), g[C]);
										p(t, I, i.num + (i.unit || 0)) && (e = !0)
									}
								}
								e && w(t)
							} else for (var n in g) {
								var i = r(h(t[n]), g[n]);
								t[n] = i.num + (i.unit || 0)
							}
						})
					}, fromTo: function (A, g, t, C) {
						T(C);
						var I = o(A), i = [];
						return e(I, function (A, e) {
							var I = {}, n = {}, o = E(e);
							if (o) {
								c(e);
								for (var s in C) {
									var l = a(e, s);
									if (l) {
										var d = h(u(e, l));
										I[l] = r(d, t[s]), n[l] = r(d, C[s], I[l], !1)
									} else n[s] = C[s]
								}
							} else for (var s in C)if (void 0 !== e[s]) {
								var d = h(e[s]);
								I[s] = r(d, t[s]), n[s] = r(d, C[s], I[s], !1)
							} else n[s] = C[s];
							var p = new M(e, g, I, n, o);
							i.push(p)
						}), 1 == i.length ? i[0] : i
					}, from: function (A, g, t) {
						T(t);
						var C = o(A), I = [];
						return e(C, function (A, e) {
							var C = {}, i = {}, n = E(e);
							if (n) {
								c(e);
								for (var o in t) {
									var s = a(e, o);
									if (s) {
										var l = h(u(e, s));
										C[s] = r(l, t[o], l, !0), i[s] = l
									} else i[o] = t[o]
								}
							} else for (var o in t)if (void 0 !== e[o]) {
								var l = h(e[o]);
								C[o] = r(l, t[o], l, !0), i[o] = l
							} else i[o] = t[o];
							var d = new M(e, g, C, i, n);
							I.push(d)
						}), 1 == I.length ? I[0] : I
					}, to: function (A, g, t) {
						T(t);
						var C = o(A), I = [];
						return e(C, function (A, e) {
							var C = {}, i = {}, n = E(e);
							if (n) {
								c(e);
								for (var o in t) {
									var s = a(e, o);
									if (s) {
										var l = h(u(e, s));
										C[s] = l, i[s] = r(l, t[o], l, !1)
									} else i[o] = t[o]
								}
							} else for (var o in t)if (void 0 !== e[o]) {
								var l = h(e[o]);
								C[o] = l, i[o] = r(l, t[o], l, !1)
							} else i[o] = t[o];
							var d = new M(e, g, C, i, n);
							I.push(d)
						}), 1 == I.length ? I[0] : I
					}, kill: function (A, g) {
						var t = o(A);
						e(t, function (A, t) {
							for (var e = P.length, C = e - 1; C >= 0; C--) {
								var I = P[C];
								I.target === t && I.kill(g)
							}
						})
					}, killAll: function (A) {
						for (var g = P.length, t = g - 1; t >= 0; t--) {
							var e = P[t];
							e.kill(A)
						}
					}, play: function (A) {
						x(A, "play")
					}, playAll: function () {
						R("play")
					}, pause: function (A) {
						x(A, "pause")
					}, pauseAll: function () {
						R("pause")
					}, isTweening: function (A) {
						var g = o(A);
						g = g[0] || g;
						for (var t = P.length, e = t - 1; e >= 0; e--) {
							var C = P[e];
							if (C.target === g)return !0
						}
						return !1
					}
				});
				var N = [];
				t(B.prototype, {
					initialize: function (A, g, t, e) {
						this.delay = 1e3 * A, this.onEnd = g || null, this.onEndParams = t || [], this.curTime = 0, this.endTime = this.delay, this.isPlaying = e || !0, 0 != this.delay ? this._addSelf() : this.onEnd && this.onEnd.apply(this, this.onEndParams)
					}, _update: function (A) {
						return !this.isPlaying || (this.curTime += A, this.curTime < this.endTime)
					}, _addSelf: function () {
						N.push(this), Y || (F = g.now(), V())
					}, _removeSelf: function () {
						var A = N.indexOf(this);
						-1 !== A && N.splice(A, 1)
					}, play: function () {
						this.isPlaying = !0
					}, pause: function () {
						this.isPlaying = !1
					}, kill: function (A) {
						this._removeSelf(), A && (this._toEnd(), this.onEnd && this.onEnd.apply(this, this.onEndParams))
					}
				}), t(g, {
					call: function (A, g, t, e) {
						return new B(A, g, t, e)
					}, killCall: function (A, g) {
						var t = A, C = N.length;
						e(t, function (A, t) {
							for (var e = C - 1; e >= 0; e--) {
								var I = N[e];
								I.onEnd === t && I.kill(g)
							}
						})
					}, killAllCalls: function (A) {
						for (var g = N.length, t = g - 1; t >= 0; t--) {
							var e = N[t];
							e.kill(A)
						}
					}, playCall: function (A) {
						y(A, "play")
					}, playAllCalls: function () {
						b("play")
					}, pauseCall: function (A) {
						y(A, "pause")
					}, pauseAllCalls: function () {
						b("pause")
					}
				}), t(g, {
					path: function (A) {
						T(A);
						for (var t, e = A.ease || g.Linear.None, C = A.step || 1, I = [], i = 0; C >= i; i++) {
							t = e(i / C);
							var n = {};
							for (var o in A)A[o] instanceof Array && (n[o] = A.interpolation(A[o], t));
							I.push(n)
						}
						return I
					}
				});
				var W = {
					Linear: function (A, g, t) {
						return (g - A) * t + A
					}, Bernstein: function (A, g) {
						var t = W.Factorial;
						return t(A) / t(g) / t(A - g)
					}, Factorial: function () {
						var A = [1];
						return function (g) {
							var t, e = 1;
							if (A[g])return A[g];
							for (t = g; t > 1; t--)e *= t;
							return A[g] = e
						}
					}(), Through: function (A, g, t, e, C) {
						var I = .5 * (t - A), i = .5 * (e - g), n = C * C, o = C * n;
						return (2 * g - 2 * t + I + i) * o + (-3 * g + 3 * t - 2 * I - i) * n + I * C + g
					}
				};
				return t(g, {
					Linear: {
						None: function (A) {
							return A
						}
					}, Quad: {
						In: function (A) {
							return A * A
						}, Out: function (A) {
							return A * (2 - A)
						}, InOut: function (A) {
							return (A *= 2) < 1 ? .5 * A * A : -.5 * (--A * (A - 2) - 1)
						}
					}, Cubic: {
						In: function (A) {
							return A * A * A
						}, Out: function (A) {
							return --A * A * A + 1
						}, InOut: function (A) {
							return (A *= 2) < 1 ? .5 * A * A * A : .5 * ((A -= 2) * A * A + 2)
						}
					}, Quart: {
						In: function (A) {
							return A * A * A * A
						}, Out: function (A) {
							return 1 - --A * A * A * A
						}, InOut: function (A) {
							return (A *= 2) < 1 ? .5 * A * A * A * A : -.5 * ((A -= 2) * A * A * A - 2)
						}
					}, Quint: {
						In: function (A) {
							return A * A * A * A * A
						}, Out: function (A) {
							return --A * A * A * A * A + 1
						}, InOut: function (A) {
							return (A *= 2) < 1 ? .5 * A * A * A * A * A : .5 * ((A -= 2) * A * A * A * A + 2)
						}
					}, Sine: {
						In: function (A) {
							return 1 - Math.cos(A * Math.PI / 2)
						}, Out: function (A) {
							return Math.sin(A * Math.PI / 2)
						}, InOut: function (A) {
							return .5 * (1 - Math.cos(Math.PI * A))
						}
					}, Expo: {
						In: function (A) {
							return 0 === A ? 0 : Math.pow(1024, A - 1)
						}, Out: function (A) {
							return 1 === A ? 1 : 1 - Math.pow(2, -10 * A)
						}, InOut: function (A) {
							return 0 === A ? 0 : 1 === A ? 1 : (A *= 2) < 1 ? .5 * Math.pow(1024, A - 1) : .5 * (-Math.pow(2, -10 * (A - 1)) + 2)
						}
					}, Circ: {
						In: function (A) {
							return 1 - Math.sqrt(1 - A * A)
						}, Out: function (A) {
							return Math.sqrt(1 - --A * A)
						}, InOut: function (A) {
							return (A *= 2) < 1 ? -.5 * (Math.sqrt(1 - A * A) - 1) : .5 * (Math.sqrt(1 - (A -= 2) * A) + 1)
						}
					}, Elastic: {
						In: function (A) {
							var g, t = .1, e = .4;
							return 0 === A ? 0 : 1 === A ? 1 : (!t || 1 > t ? (t = 1, g = e / 4) : g = e * Math.asin(1 / t) / (2 * Math.PI), -(t * Math.pow(2, 10 * (A -= 1)) * Math.sin(2 * (A - g) * Math.PI / e)))
						}, Out: function (A) {
							var g, t = .1, e = .4;
							return 0 === A ? 0 : 1 === A ? 1 : (!t || 1 > t ? (t = 1, g = e / 4) : g = e * Math.asin(1 / t) / (2 * Math.PI), t * Math.pow(2, -10 * A) * Math.sin(2 * (A - g) * Math.PI / e) + 1)
						}, InOut: function (A) {
							var g, t = .1, e = .4;
							return 0 === A ? 0 : 1 === A ? 1 : (!t || 1 > t ? (t = 1, g = e / 4) : g = e * Math.asin(1 / t) / (2 * Math.PI), (A *= 2) < 1 ? -.5 * t * Math.pow(2, 10 * (A -= 1)) * Math.sin(2 * (A - g) * Math.PI / e) : t * Math.pow(2, -10 * (A -= 1)) * Math.sin(2 * (A - g) * Math.PI / e) * .5 + 1)
						}
					}, Back: {
						In: function (A) {
							var g = 1.70158;
							return A * A * ((g + 1) * A - g)
						}, Out: function (A) {
							var g = 1.70158;
							return --A * A * ((g + 1) * A + g) + 1
						}, InOut: function (A) {
							var g = 2.5949095;
							return (A *= 2) < 1 ? .5 * A * A * ((g + 1) * A - g) : .5 * ((A -= 2) * A * ((g + 1) * A + g) + 2)
						}
					}, Bounce: {
						In: function (A) {
							return 1 - g.Bounce.Out(1 - A)
						}, Out: function (A) {
							return 1 / 2.75 > A ? 7.5625 * A * A : 2 / 2.75 > A ? 7.5625 * (A -= 1.5 / 2.75) * A + .75 : 2.5 / 2.75 > A ? 7.5625 * (A -= 2.25 / 2.75) * A + .9375 : 7.5625 * (A -= 2.625 / 2.75) * A + .984375
						}, InOut: function (A) {
							return .5 > A ? .5 * g.Bounce.In(2 * A) : .5 * g.Bounce.Out(2 * A - 1) + .5
						}
					}
				}), g.now = q, g
			})
		}).call(g, function () {
			return this
		}())
	}, 3: function (A, g, t) {
		(function (g) {
			var t = g.extend({}, g.Events, {
				ups: null,
				isPreloaded: !1,
				isReady: !1,
				isVR: !1,
				isFirst: !1,
				isActive: !0,
				init: function () {
					this.parseUrl()
				},
				random: function (A, g) {
					return A + Math.floor(Math.random() * (g - A) * 100) / 100
				},
				checkLandscape: function () {
					return 90 == window.orientation || window.orientation == -90
				},
				limiter: function (A, g, t) {
					return t ? Math.max(g, Math.min(t, A)) : g ? Math.max(-g, Math.min(g, A)) : Math.max(-60, Math.min(60, A))
				},
				canvas: !!window.CanvasRenderingContext2D,
				webgl: function () {
					try {
						var A = document.createElement("canvas");
						return !(!window.WebGLRenderingContext || !A.getContext("webgl") && !A.getContext("experimental-webgl"))
					} catch (g) {
						return !1
					}
				}(),
				parseUrl: function () {
					var A = {}, g = window.location.href.indexOf("?");
					if (g != -1) {
						var t = window.location.href.substr(g + 1), e = t.indexOf("#");
						e != -1 && (t = t.substr(0, e));
						for (var C = t.split("&"), I = C.length, i = 0; i < I; i++) {
							var n = C[i].split("=");
							A[n[0]] = n[1]
						}
					}
					this.ups = A
				},
				shareToWeibo: function () {
					var A = "http://" + location.host, g = "穿越宇宙向你发来的一封双11邀请函", t = "http://" + location.host + "/impublic/images/share/weibo.jpg";
					window.open("http://service.weibo.com/share/share.php?appkey=1311658869&url=" + encodeURIComponent(A) + "&title=" + encodeURIComponent(g) + "&source=&sourceUrl=&content=utf-8&pic=" + encodeURIComponent(t))
				}
			});
			A.exports = t
		}).call(g, t(1))
	}, 4: function (A, g) {
		A.exports = {
			PAGE: "page", PAGE2: "page2", EVENT: "event", EVENT2: "event2", ga: function (A, g, t, e) {
				switch (A) {
					case this.PAGE:
						"function" == typeof ga && ga("send", "event", g, t, {nonInteraction: !0});
						break;
					case this.PAGE2:
						"function" == typeof ga && ga("send", "pageview", g);
						break;
					case this.EVENT:
						"function" == typeof ga && ga("send", "event", "Click", g, t);
						break;
					case this.EVENT2:
						"function" == typeof ga && ga("send", "event", g, t, e, {nonInteraction: !0})
				}
			}
		}
	}, 11: function (A, g, t) {
		A.exports = t.p + "34bfd9d9e6543495d01ce97304a81b0d.png"
	}, 12: function (A, g) {
		A.exports = "";
	}, 15: function (A, g) {
		A.exports = function () {
			var A = [];
			return A.toString = function () {
				for (var A = [], g = 0; g < this.length; g++) {
					var t = this[g];
					t[2] ? A.push("@media " + t[2] + "{" + t[1] + "}") : A.push(t[1])
				}
				return A.join("")
			}, A.i = function (g, t) {
				"string" == typeof g && (g = [[null, g, ""]]);
				for (var e = {}, C = 0; C < this.length; C++) {
					var I = this[C][0];
					"number" == typeof I && (e[I] = !0)
				}
				for (C = 0; C < g.length; C++) {
					var i = g[C];
					"number" == typeof i[0] && e[i[0]] || (t && !i[2] ? i[2] = t : t && (i[2] = "(" + i[2] + ") and (" + t + ")"), A.push(i))
				}
			}, A
		}
	}, 16: function (A, g, t) {
		function e(A, g) {
			for (var t = 0; t < A.length; t++) {
				var e = A[t], C = s[e.id];
				if (C) {
					C.refs++;
					for (var I = 0; I < C.parts.length; I++)C.parts[I](e.parts[I]);
					for (; I < e.parts.length; I++)C.parts.push(n(e.parts[I], g))
				} else {
					for (var i = [], I = 0; I < e.parts.length; I++)i.push(n(e.parts[I], g));
					s[e.id] = {id: e.id, refs: 1, parts: i}
				}
			}
		}
		
		function C(A) {
			for (var g = [], t = {}, e = 0; e < A.length; e++) {
				var C = A[e], I = C[0], i = C[1], n = C[2], o = C[3], a = {css: i, media: n, sourceMap: o};
				t[I] ? t[I].parts.push(a) : g.push(t[I] = {id: I, parts: [a]})
			}
			return g
		}
		
		function I() {
			var A = document.createElement("style"), g = l();
			return A.type = "text/css", g.appendChild(A), A
		}
		
		function i() {
			var A = document.createElement("link"), g = l();
			return A.rel = "stylesheet", g.appendChild(A), A
		}
		
		function n(A, g) {
			var t, e, C;
			if (g.singleton) {
				var n = d++;
				t = u || (u = I()), e = o.bind(null, t, n, !1), C = o.bind(null, t, n, !0)
			} else A.sourceMap && "function" == typeof URL && "function" == typeof URL.createObjectURL && "function" == typeof URL.revokeObjectURL && "function" == typeof Blob && "function" == typeof btoa ? (t = i(), e = r.bind(null, t), C = function () {
				t.parentNode.removeChild(t), t.href && URL.revokeObjectURL(t.href)
			}) : (t = I(), e = a.bind(null, t), C = function () {
				t.parentNode.removeChild(t)
			});
			return e(A), function (g) {
				if (g) {
					if (g.css === A.css && g.media === A.media && g.sourceMap === A.sourceMap)return;
					e(A = g)
				} else C()
			}
		}
		
		function o(A, g, t, e) {
			var C = t ? "" : e.css;
			if (A.styleSheet)A.styleSheet.cssText = p(g, C); else {
				var I = document.createTextNode(C), i = A.childNodes;
				i[g] && A.removeChild(i[g]), i.length ? A.insertBefore(I, i[g]) : A.appendChild(I)
			}
		}
		
		function a(A, g) {
			var t = g.css, e = g.media;
			g.sourceMap;
			if (e && A.setAttribute("media", e), A.styleSheet)A.styleSheet.cssText = t; else {
				for (; A.firstChild;)A.removeChild(A.firstChild);
				A.appendChild(document.createTextNode(t))
			}
		}
		
		function r(A, g) {
			var t = g.css, e = (g.media, g.sourceMap);
			e && (t += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(e)))) + " */");
			var C = new Blob([t], {type: "text/css"}), I = A.href;
			A.href = URL.createObjectURL(C), I && URL.revokeObjectURL(I)
		}
		
		Array.prototype.filter || (Array.prototype.filter = function (A) {
			"use strict";
			if (void 0 === this || null === this)throw new TypeError;
			var g = Object(this), t = g.length >>> 0;
			if ("function" != typeof A)throw new TypeError;
			for (var e = [], C = arguments.length >= 2 ? arguments[1] : void 0, I = 0; I < t; I++)if (I in g) {
				var i = g[I];
				A.call(C, i, I, g) && e.push(i)
			}
			return e
		}), Function.prototype.bind || (Function.prototype.bind = function (A) {
			if ("function" != typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
			var g = Array.prototype.slice.call(arguments, 1), t = this, e = function () {
			}, C = function () {
				return t.apply(this instanceof e ? this : A, g.concat(Array.prototype.slice.call(arguments)))
			};
			return e.prototype = this.prototype, C.prototype = new e, C
		});
		var s = {}, c = function (A) {
			var g;
			return function () {
				return "undefined" == typeof g && (g = A.apply(this, arguments)), g
			}
		}, h = c(function () {
			return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())
		}), l = c(function () {
			return document.head || document.getElementsByTagName("head")[0]
		}), u = null, d = 0;
		A.exports = function (A, g) {
			g = g || {}, "undefined" == typeof g.singleton && (g.singleton = h());
			var t = C(A);
			return e(t, g), function (A) {
				for (var I = [], i = 0; i < t.length; i++) {
					var n = t[i], o = s[n.id];
					o.refs--, I.push(o)
				}
				if (A) {
					var a = C(A);
					e(a, g)
				}
				for (var i = 0; i < I.length; i++) {
					var o = I[i];
					if (0 === o.refs) {
						for (var r = 0; r < o.parts.length; r++)o.parts[r]();
						delete s[o.id]
					}
				}
			}
		};
		var p = function () {
			var A = [];
			return function (g, t) {
				return A[g] = t, A.filter(Boolean).join("\n")
			}
		}()
	}, 17: function (A, g) {
		A.exports = ""
	}, 18: function (A, g) {
		A.exports = ""
	}, 19: function (A, g) {
		A.exports = ""
	}, 24: function (A, g) {
		A.exports = ""
	}, 25: function (A, g) {
		A.exports = $
	}, 26: function (A, g, t) {
		g = A.exports = t(15)(), g.push([A.id, "#nav,#open,#vr{top:0;position:absolute}#nav,#nav div,#open,#vr{position:absolute}#open,#vr{width:15%;left:0;display:none}#nav{right:100%;width:100%;height:100%;overflow:hidden}#nav .bg1,#nav .close{right:0;top:0;width:15%}#nav div{background-size:contain;background-position:center center;background-repeat:no-repeat}#nav .bg1{height:100%;background:#000;opacity:.5}#nav .close{height:100%;background-image:url(" + t(47) + ");background-position:top center}#nav .bg2,#nav .items{left:0;top:0;width:85%;height:100%}#nav .bg2{background:url(" + t(17) + ");background-size:100% 100%;mix-blend-mode:multiply}#nav .items .item{position:static;float:right;clear:right;width:100%;height:9.09%;border-bottom:.1px dotted #fff}#nav .items .item1{background-image:url(" + t(52) + ")}#nav .items .item2{background-image:url(" + t(54) + ")}#nav .items .item3{background-image:url(" + t(55) + ")}#nav .items .item4{background-image:url(" + t(56) + ")}#nav .items .item5{background-image:url(" + t(57) + ")}#nav .items .item6{background-image:url(" + t(58) + ")}#nav .items .item7{background-image:url(" + t(59) + ")}#nav .items .item8{background-image:url(" + t(60) + ")}#nav .items .item9{background-image:url(" + t(61) + ")}#nav .items .item10{background-image:url(" + t(53) + ")}#nav .items .item11{background-color:#21054b;border-bottom:.1px solid #21054b}#nav .items .item11 img{height:100%;float:right}#nav .items .item11 .share{margin:0 20px 0 0}#nav .items .item11 .muteOn{display:block}#nav .items .item11 .muteOff{display:none}#nav .items .item11 .vrOn{margin:0 10px 0 0;display:none}#nav .items .item11 .vrOff{margin:0 10px 0 0;display:block}", ""]);
	}, 27: function (A, g, t) {
		g = A.exports = t(15)(), g.push([A.id, "#pop,#pop div{position:absolute;left:0;top:0;width:100%;height:100%}#pop .text,#pop>.bg{mix-blend-mode:multiply}#pop,#pop .intro div,#pop .text{display:none}#pop{overflow:hidden}#pop div{background-size:contain;background-position:center center;background-repeat:no-repeat}#pop>.bg{opacity:0;background:url(" + t(17) + ");background-size:100% 100%}#pop>.content{opacity:0;display:none}#pop .intro .t1{background-image:url(" + t(218) + ")}#pop .intro .t2{background-image:url(" + t(219) + ")}#pop .intro .t3{background-image:url(" + t(220) + ")}#pop .intro .t4{background-image:url(" + t(221) + ")}#pop .intro .t5{background-image:url(" + t(24) + ")}#pop .share{background-image:url(" + t(84) + ")}#pop .tip .p1{background-image:url(" + t(86) + ")}#pop .tip .p2{background-image:url(" + t(24) + ")}#pop .text{font-size:260px;height:300px;line-height:300px;color:red;opacity:.2;top:50%;margin:-150px 0 0;text-align:center}", ""])
	}, 28: function (A, g, t) {
		A.exports = '<img id=vr src="' + t(63) + '"> <img id=open src="' + t(50) + '"><div id=nav><div class=bg1></div><div class=bg2></div><div class=close></div><div class=items><div class="item item1"></div><div class="item item8"></div><div class="item item2"></div><div class="item item3"></div><div class="item item4"></div><div class="item item5"></div><div class="item item7"></div><div class="item item6"></div><div class="item item9"></div><div class="item item10"></div><div class="item item11"><img class=share src="' + t(51) + '"> <img class=muteOn src="' + t(49) + '"> <img class=muteOff src="' + t(48) + '"> <img class=vrOff src="' + t(62) + '"></div></div></div>'
	}, 29: function (A, g) {
		A.exports = '<div id=pop><div class=bg></div><div class="content info"></div><div class="content intro"><div class=t1></div><div class=t2></div><div class=t3></div><div class=t4></div><div class=t5></div></div><div class="content share"></div><div class="content tip"><div class=p1></div><div class=p2></div></div><div class="content text"></div></div>'
	}, 30: function (A, g, t) {
		(function (g, e) {
			var C = t(3), I = t(4), i = g.extend({}, g.Events, {
				stage: null,
				camera: null,
				scene: null,
				renderer: null,
				effect: null,
				root: null,
				preload: null,
				stats: null,
				raycaster: null,
				mouse: null,
				fix: {x: 0, y: 0, z: 0},
				aim: {x: 0, y: 0, z: 0},
				data: null,
				init: function (A) {
					I.ga(I.EVENT, "Ver", "Canvas");
					var g = this;
					this.stage = A, this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1e6), this.camera.position.z = 500, this.scene = new THREE.Scene, this.root = new THREE.Group, this.root.position.y = -300, this.root.position.z = 5e3, this.scene.add(this.root), this.raycaster = new THREE.Raycaster, this.mouse = new THREE.Vector2;
					var e = [{url: t(11), w: 960, h: 960, x: 0, y: 0, z: 0, s: .4}, {
						url: t(12),
						w: 227,
						h: 960,
						x: 0,
						y: 0,
						z: 0,
						s: .8,
						r: 30
					}, {url: t(18), w: 16, h: 256, x: 0, y: 0, z: 0, s: 4, n: 12, t: .5}, {
						url: t(19),
						w: 431,
						h: 532,
						x: 0,
						y: 0,
						z: 0,
						s: 4,
						n: 4,
						t: 4
					}];
					this.preload = this.createPreload(e), this.preload.position.set(0, 300, -5e3), this.root.add(this.preload), this.preloadOn(), this.renderer = new THREE.CanvasRenderer, this.renderer.setClearColor(1245234), this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(window.innerWidth, window.innerHeight), this.stage.prepend(this.renderer.domElement), this.effect = new THREE.StereoEffect(this.renderer), this.effect.eyeSeparation = 10, this.effect.setSize(window.innerWidth, window.innerHeight), t.e(2, function () {
						g.data = t(13), g.complete()
					})
				},
				complete: function () {
					var A = this.createSprite(this.data.p1);
					this.addScene({scene: A, max: 500, min: -1100});
					var g = this.createSprite(this.data.p2);
					this.addScene({scene: g, max: -1100, min: -2300});
					var t = this.createSprite(this.data.p3);
					this.addScene({scene: t, max: -2300, min: -3500});
					var e = this.createSprite(this.data.p4);
					this.addScene({scene: e, max: -3500, min: -5500});
					var C = this.createSprite(this.data.p5);
					this.addScene({scene: C, max: -5500, min: -7e3});
					var I = this.createSprite(this.data.p6);
					this.addScene({
						scene: I,
						max: -7e3,
						min: -1e4
					}), this.dots = this.createScene(this.data.data14), this.dots.position.set(0, 0, 0), this.addScene({
						scene: this.dots,
						max: 0,
						min: -5e5
					})
				},
				tap: function (A) {
					this.mouse.x = A.x / window.innerWidth * 2 - 1, this.mouse.y = 2 * -(A.y / window.innerHeight) + 1, this.raycaster.setFromCamera(this.mouse, this.camera);
					var g = this.raycaster.intersectObjects(this.dots.children);
					g.length > 0 && (11 == g[0].object.name ? this.trigger("share") : this.trigger("dot", g[0].object.name))
				},
				preloadData: {max: 0, cur: 0},
				checkPreload: function () {
					this.trigger("preloadProgress", Math.floor(this.preloadData.cur / this.preloadData.max * 100)), this.preloadData.cur >= this.preloadData.max && this.preloadOff()
				},
				preloadOn: function () {
					function A(A) {
						if (A.n0 > 10) {
							var t = g(700, 900);
							A.position.set(t.x, t.y, 0), A.material.rotation = t.r + Math.PI / 2;
							var e = .4 * Math.random() + .2;
							A.scale.set(A.w0 * e, A.h0 * e, 1)
						} else {
							var t = g(200, 500);
							A.position.set(t.x, t.y, 0), A.material.rotation = Math.random() * Math.PI;
							var e = 1 * Math.random() + .5;
							A.scale.set(A.w0 * e, A.h0 * e, 1)
						}
					}

					function g(A, g) {
						var t = C.random(A, g), e = Math.random() * Math.PI * 2, I = Math.sin(e) * t, i = Math.cos(e) * t;
						return {x: i, y: I, r: e}
					}

					I.ga(I.PAGE, "loading", "loading_scene"), C.isPreloaded = !1, $.each(this.preload.children, function (g, t) {
						0 == g && e.fromTo(t.scale, .01, {x: 1 * t.w0, y: 1 * t.h0}, {
							x: 1.1 * t.w0,
							y: 1.1 * t.h0,
							yoyo: !0,
							repeat: -1,
							onUpdate: function () {
								t.material.rotation = .1 * Math.random() - .2
							}
						}), g <= 1 || (A(t), e.fromTo(t.position, t.t0, {z: 500}, {
							z: -2e4,
							delay: t.i0 * (t.t0 / t.n0),
							repeat: -1,
							onRepeat: function () {
								A(t)
							}
						}))
					}), this.trigger("preloadOn")
				},
				preloadOff: function () {
					var A = this;
					C.isPreloaded = !0, e.to(this.root.position, 2, {
						z: -400, ease: e.Quad.In, onEnd: function () {
							$.each(A.preload.children, function (A, g) {
								e.kill(g)
							}), A.root.remove(A.preload), C.isReady = !0, A.trigger("ready")
						}
					}), this.trigger("preloadOff")
				},
				createPreload: function (A) {
					for (var g = new THREE.Group, t = 0, e = A.length; t < e; t++)for (var C = A[t].n || 1, I = 0; I < C; I++) {
						var i = (new THREE.TextureLoader).load(A[t].url), n = new THREE.SpriteMaterial({map: i}), o = (A[t].turn ? -1 : 1) * A[t].w * (A[t].s || 1), a = A[t].h * (A[t].s || 1), r = new THREE.Sprite(n);
						r.position.set(A[t].x, A[t].y, A[t].z), r.scale.set(o, a, 1), r.w0 = o, r.h0 = a, r.t0 = A[t].t, r.n0 = A[t].n, r.i0 = I, A[t].r && (r.material.rotation = A[t].r / 180 * Math.PI), A[t].name && (r.name = A[t].name), g.add(r)
					}
					return g
				},
				createScene: function (A) {
					var g = this, t = new THREE.Group;
					t.childs = [];
					for (var e = 0, C = A.length; e < C; e++) {
						this.preloadData.max++;
						var I = (new THREE.TextureLoader).load(A[e].url, function () {
							g.preloadData.cur++, g.checkPreload()
						}), i = new THREE.SpriteMaterial({map: I}), n = new THREE.Sprite(i);
						if (n.position.set(A[e].x, A[e].y, A[e].z), n.scale.set((A[e].turn ? -1 : 1) * A[e].w * (A[e].s || 1), A[e].h * (A[e].s || 1), 1), A[e].r && (n.material.rotation = A[e].r / 180 * Math.PI), A[e].name && (n.name = A[e].name), t.add(n), n.isIn = !0, t.childs.push(n), !A[e].single) {
							var o = new THREE.Sprite(i);
							o.position.set(-A[e].x, A[e].y, A[e].z), o.scale.set(-A[e].w * (A[e].s || 1), A[e].h * (A[e].s || 1), 1), t.add(o), o.isIn = !0, t.childs.push(o)
						}
						A[e].walk && (A[e].walk.target = n, this.addWalk(A[e].walk))
					}
					return t
				},
				createSprite: function (A) {
					var g = new THREE.SpriteMaterial({map: (new THREE.TextureLoader).load(A.url)}), t = new THREE.Sprite(g);
					return t.position.set(A.x, A.y, A.z), t.scale.set(A.w * (A.s || 1), A.h * (A.s || 1), 1), t
				},
				resize: function () {
					this.camera.aspect = window.innerWidth / window.innerHeight, this.camera.updateProjectionMatrix(), this.effect.setSize(window.innerWidth, window.innerHeight), this.renderer.setSize(window.innerWidth, window.innerHeight)
				},
				render: function () {
					if (C.isActive) {
						var A = .2 * this.aim.z;
						C.isReady && (this.root.position.z > 0 && A > 0 && (A *= 1 - (this.root.position.z - 0) / 200), this.root.position.z < -6500 && A < 0 && (A *= 1 - (-this.root.position.z - 6500) / 2e3), this.root.position.z += A), this.updateScene(this.root.position.z), this.camera.rotation.x += .3 * (.2 * this.fix.y - this.camera.rotation.x), this.camera.rotation.y += .3 * (.2 * this.fix.x - this.camera.rotation.y), C.checkLandscape() ? this.effect.render(this.scene, this.camera) : this.renderer.render(this.scene, this.camera)
					}
				},
				scenes: [],
				addScene: function (A) {
					this.scenes.push(A), this.root.add(A.scene), A.isIn = !0
				},
				updateScene: function (A) {
					var g = this;
					$.each(this.scenes, function (t, e) {
						var C = Math.max(e.max, e.min), I = Math.min(e.max, e.min);
						A > I && A < C ? e.isIn || (e.isIn = !0, g.root.add(e.scene)) : e.isIn && (e.isIn = !1, g.root.remove(e.scene))
					})
				},
				animate: function () {
					i.render(), requestAnimationFrame(i.animate)
				},
				toDot: function (A) {
					this.aim.z = 0;
					var g = this.dots.childs[A - 1], t = -g.position.z - 300, C = Math.min(3, Math.abs(this.root.position.z - t) / 1e4);
					e.kill(this.root), e.to(this.root.position, C, {z: t, ease: e.Quad.InOut})
				}
			});
			A.exports = i
		}).call(g, t(1), t(2))
	}, 31: function (A, g, t) {
		(function (g) {
			var t = g.extend({}, g.Events, {
				START: "start",
				END: "end",
				MOVE: "move",
				TAP: "tap",
				stage: null,
				originTouchPos: {x: 0, y: 0},
				oldTouchPos: {x: 0, y: 0},
				newTouchPos: {x: 0, y: 0},
				firstDir: "",
				originTime: 0,
				oldTime: 0,
				newTime: 0,
				dx: 0,
				dy: 0,
				ax: 0,
				ay: 0,
				time: 0,
				init: function (A) {
					this.stage = A, this.onTouchStart = this.onTouchStart.bind(this), this.onTouchMove = this.onTouchMove.bind(this), this.onTouchEnd = this.onTouchEnd.bind(this), this.stage.on("touchstart", this.onTouchStart)
				},
				clear: function () {
					this.stage.off("touchstart", this.onTouchStart), this.stage.off("touchmove", this.onTouchMove), this.stage.off("touchend", this.onTouchEnd)
				},
				onTouchStart: function (A) {
					this.firstDir = "", A = A.changedTouches[0], this.originTouchPos.x = this.oldTouchPos.x = this.newTouchPos.x = A.clientX, this.originTouchPos.y = this.oldTouchPos.y = this.newTouchPos.y = A.clientY, this.originTime = this.oldTime = this.newTime = Date.now(), this.dx = this.dy = this.ax = this.ay = 0, this.stage.on("touchmove", this.onTouchMove), this.stage.on("touchend", this.onTouchEnd), this.trigger(this.START)
				},
				onTouchMove: function (A) {
					return A = A.changedTouches[0], this.newTouchPos.x = A.clientX, this.newTouchPos.y = A.clientY, this.newTime = Date.now(), this.checkGesture(), this.oldTouchPos.x = this.newTouchPos.x, this.oldTouchPos.y = this.newTouchPos.y, this.oldTime = this.newTime, !1
				},
				onTouchEnd: function () {
					this.stage.off("touchmove", this.onTouchMove), this.stage.off("touchend", this.onTouchEnd), this.newTime = Date.now();
					var A = (this.newTime - this.oldTime) / 1e3;
					return this.trigger(this.END, {
						x: this.newTouchPos.x,
						y: this.newTouchPos.y,
						dx: this.dx,
						dy: this.dy,
						ax: 2 * this.time > A ? this.ax : 0,
						ay: 2 * this.time > A ? this.ay : 0,
						dir: this.firstDir
					}), Math.abs(this.dx) < 5 && Math.abs(this.dy) < 5 && this.trigger(this.TAP, {
						x: this.newTouchPos.x,
						y: this.newTouchPos.y
					}), !1
				},
				checkGesture: function () {
					this.dx = this.fixed2(this.newTouchPos.x - this.originTouchPos.x), this.dy = this.fixed2(this.newTouchPos.y - this.originTouchPos.y), this.ax = this.fixed2(this.newTouchPos.x - this.oldTouchPos.x), this.ay = this.fixed2(this.newTouchPos.y - this.oldTouchPos.y), this.time = (this.newTime - this.oldTime) / 1e3, "" == this.firstDir && (Math.abs(this.ax) > Math.abs(this.ay) ? this.firstDir = "x" : Math.abs(this.ax) < Math.abs(this.ay) && (this.firstDir = "y")), this.trigger(this.MOVE, {
						x: this.newTouchPos.x,
						y: this.newTouchPos.y,
						dx: this.dx,
						dy: this.dy,
						ax: this.ax,
						ay: this.ay,
						dir: this.firstDir
					})
				},
				fixed2: function (A) {
					return Math.floor(100 * A) / 100
				}
			});
			A.exports = t
		}).call(g, t(1))
	}, 32: function (A, g, t) {
		(function (g, e) {
			t(39);
			var C = t(3), I = t(4);
			A.exports = g.extend({}, g.Events, {
				isOut: !1, init: function (A) {
					var g = this;
					this.stage = A;
					var e = t(28);
					this.stage.append(e), this.$nav = this.stage.find("#nav"), this.$open = this.stage.find("#open"), this.$close = this.$nav.find(".close"), this.$share = this.$nav.find(".share"), this.$muteOn = this.$nav.find(".muteOn"), this.$muteOff = this.$nav.find(".muteOff"), this.$vrOff = this.$nav.find(".vrOff"), this.$vrOn = this.stage.find("#vr"), this.$open.on("touchend", function () {
						g.open(), I.ga(I.EVENT, "Tmall-Nav", "Nav")
					}), this.$close.on("touchend", function () {
						g.close()
					}), this.$share.on("touchend", function () {
						g.close(), g.trigger("share")
					}), this.$muteOn.on("touchend", function () {
						g.muteOn(), I.ga(I.EVENT, "Tmall-Nav", "Music-close")
					}), this.$muteOff.on("touchend", function () {
						g.muteOff(), I.ga(I.EVENT, "Tmall-Nav", "Music-open")
					}), this.$vrOn.on("touchend", function () {
						g.vrOn(), I.ga(I.EVENT, "Tmall-Nav", "VR-close")
					}), this.$vrOff.on("touchend", function () {
						g.vrOff(), I.ga(I.EVENT, "Tmall-Nav", "VR-open")
					}), $.each([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], function (A) {
						g.$nav.find(".item" + (A + 1)).on("touchend", function () {
							g.close(), g.trigger("item", A + 1)
						})
					})
				}, isMute: !0, muteOn: function () {
					this.$muteOn.css({display: "none"}), this.$muteOff.css({display: "block"}), this.isMute = !1, this.trigger("muteOn")
				}, muteOff: function () {
					this.$muteOn.css({display: "block"}), this.$muteOff.css({display: "none"}), this.isMute = !0, this.trigger("muteOff")
				}, "in": function () {
					C.isVR ? this.$vrOn.css({display: "block"}) : this.$open.css({display: "block"})
				}, out: function () {
					this.close(), C.isVR ? this.$open.css({display: "none"}) : this.$open.css({display: "none"})
				}, isOpen: !1, open: function () {
					this.isOpen || (this.isOpen = !0, this.trigger("open"), this.$open.css({display: "none"}), e.to(this.$nav, .3, {
						right: "0%",
						ease: e.Quad.Out
					}))
				}, close: function () {
					var A = this;
					this.isOpen && (this.trigger("close"), this.$open.css({display: "block"}), e.to(this.$nav, .3, {
						right: "100%",
						ease: e.Quad.Out,
						onEnd: function () {
							A.isOpen = !1
						}
					}))
				}, vrOn: function () {
					C.isVR = !1, this.$vrOn.css({display: "none"}), this.$open.css({display: "block"}), this.trigger("vr")
				}, vrOff: function () {
					C.isVR = !0, this.close(), this.$vrOn.css({display: "block"}), this.$open.css({display: "none"}), this.trigger("vr")
				}
			})
		}).call(g, t(1), t(2))
	}, 33: function (A, g, t) {
		(function (g, e) {
			t(40);
			var C = (t(3), t(4));
			A.exports = g.extend({}, g.Events, {
				init: function (A) {
					var g = this;
					this.stage = A;
					var e = t(29);
					this.stage.append(e), this.$el = this.stage.find("#pop"), this.$bg = this.$el.children(".bg"), this.$intro = this.$el.children(".intro"), this.$info = this.$el.children(".info"), this.$share = this.$el.children(".share"), this.$text = this.$el.children(".text"), this.$tip = this.$el.children(".tip"), this.$info.on("touchstart", function () {
						g.popOff(), C.ga(C.EVENT, "Tmall-Layer", "close")
					}), this.$share.on("touchstart", function () {
						g.shareOff(), C.ga(C.EVENT, "Tmall-Layer", "close")
					})
				}, isIntro: !1, introOn: function () {
					this.isIntro = !0;
					var A = this;
					this.$el.css({display: "block"}), this.$intro.css({display: "block", opacity: 1});
					var g = this.$intro.find(".t1"), t = this.$intro.find(".t2"), C = this.$intro.find(".t3"), I = this.$intro.find(".t4"), i = this.$intro.find(".t5");
					g.css({display: "block"}), this.$bg.css({opacity: Math.random()}), e.call(.8, function () {
						g.css({display: "none"}), t.css({display: "block"}), A.$bg.css({opacity: Math.random()}), e.call(.5, function () {
							t.css({display: "none"}), C.css({display: "block"}), A.$bg.css({opacity: Math.random()}), e.call(.5, function () {
								C.css({display: "none"}), I.css({display: "block"}), A.$bg.css({opacity: .7}), e.call(.8, function () {
									I.css({display: "none"}), i.css({display: "block"}), A.$bg.css({opacity: Math.random()}), A.$intro.on("touchstart", function () {
										A.introOff()
									})
								})
							})
						})
					})
				}, introOff: function () {
					this.$intro.find(".t5").css({display: "none"}), this.$bg.css({opacity: 0}), this.$intro.css({display: "none"}), this.$el.css({display: "none"}), this.$intro.off("touchstart"), this.isIntro = !1, this.trigger("introOff")
				}, tipOn: function (A) {
					this.isIntro && this.introOff(), this.isPop && this.popOff(), this.isShare && this.shareOff();
					var g = this;
					this.$el.css({display: "block"}), this.$tip.find("div").css({display: "none"}), this.$tip.find(".p" + A).css({display: "block"}), e.to(this.$bg, .3, {opacity: 1}), e.to(this.$tip, .3, {
						opacity: 1,
						onStart: function () {
							this.target.style.display = "block"
						}
					}), e.call(2, function () {
						e.to(g.$bg, .3, {opacity: 0}), e.to(g.$tip, .3, {
							opacity: 0, onEnd: function () {
								this.target.style.display = "none", g.$el.css({display: "none"})
							}
						})
					})
				}, isPop: !1, popOn: function (A) {
					if (!this.isPop)switch (this.isPop = !0, this.$el.css({display: "block"}), e.to(this.$bg, .3, {opacity: 1}), e.to(this.$info, .3, {
						opacity: 1,
						onStart: function () {
							this.target.style.display = "block"
						}
					}), this.$info.css({backgroundImage: 'url("./impublic/images/pop/info' + A + '.png")'}), A) {
						case 1:
							C.ga(C.PAGE2, "Fashion");
							break;
						case 2:
							C.ga(C.PAGE2, "AI");
							break;
						case 3:
							C.ga(C.PAGE2, "New-life");
							break;
						case 4:
							C.ga(C.PAGE2, "Brand-Carnival");
							break;
						case 5:
							C.ga(C.PAGE2, "Buy");
							break;
						case 6:
							C.ga(C.PAGE2, "Red-Packets");
							break;
						case 7:
							C.ga(C.PAGE2, "Stepped");
							break;
						case 8:
							C.ga(C.PAGE2, "Live");
							break;
						case 9:
							C.ga(C.PAGE2, "Carnival-Night");
							break;
						case 10:
							C.ga(C.PAGE2, "11")
					}
				}, popOff: function () {
					if (this.isPop) {
						var A = this;
						e.to(this.$bg, .3, {opacity: 0}), e.to(this.$info, .3, {
							opacity: 0, onEnd: function () {
								this.target.style.display = "none", A.$el.css({display: "none"}), A.$info.css({backgroundImage: ""}), A.isPop = !1
							}
						})
					}
				}, isShare: !1, shareOn: function () {
					this.isShare || (this.isShare = !0, this.$el.css({display: "block"}), e.to(this.$bg, .3, {opacity: 1}), e.to(this.$share, .3, {
						opacity: 1,
						onStart: function () {
							this.target.style.display = "block"
						}
					}), C.ga(C.PAGE2, "Share-page"))
				}, shareOff: function () {
					if (this.isShare) {
						var A = this;
						e.to(this.$bg, .3, {opacity: 0}), e.to(this.$share, .3, {
							opacity: 0, onEnd: function () {
								this.target.style.display = "none", A.$el.css({display: "none"}), A.isShare = !1
							}
						})
					}
				}, preloadOn: function () {
					this.$el.css({display: "block"}), this.$text.css({display: "block"}), this.$text.html("00")
				}, preloadOff: function () {
					this.$el.css({display: "none"}), this.$text.css({display: "none"})
				}, preloadProgress: function (A) {
					A = Math.min(99, A), this.$text.html(A < 10 ? "0" + A : A)
				}
			})
		}).call(g, t(1), t(2))
	}, 34: function (A, g, t) {
		(function (g, e) {
			var C = t(3), I = t(4), i = g.extend({}, g.Events, {
				stage: null,
				camera: null,
				scene: null,
				renderer: null,
				effect: null,
				root: null,
				preload: null,
				stats: null,
				raycaster: null,
				mouse: null,
				fix: {x: 0, y: 0, z: 0},
				aim: {x: 0, y: 0, z: 0},
				data: null,
				init: function (A) {
					I.ga(I.EVENT, "Ver", "Webgl");
					var g = this;
					this.stage = A, this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1e6), this.camera.position.z = 500, this.scene = new THREE.Scene, this.root = new THREE.Group, this.root.position.y = -300, this.root.position.z = 5e3, this.scene.add(this.root), this.raycaster = new THREE.Raycaster, this.mouse = new THREE.Vector2;
					var e = [{url: t(11), w: 960, h: 960, x: 0, y: 0, z: 0, s: .4}, {
						url: t(12),
						w: 227,
						h: 960,
						x: 0,
						y: 0,
						z: 100,
						s: .8,
						r: 30
					}, {url: t(18), w: 16, h: 256, x: 0, y: 0, z: 0, s: 4, n: 20, t: .5}, {
						url: t(19),
						w: 431,
						h: 532,
						x: 0,
						y: 0,
						z: 0,
						s: 4,
						n: 6,
						t: 4
					}];
					this.preload = this.createPreload(e), this.preload.position.set(0, 300, -5e3), this.root.add(this.preload), this.preloadOn(), this.renderer = new THREE.WebGLRenderer, this.renderer.setClearColor(1245234), this.renderer.setPixelRatio(window.devicePixelRatio), this.renderer.setSize(window.innerWidth, window.innerHeight), this.stage.prepend(this.renderer.domElement), this.effect = new THREE.StereoEffect(this.renderer), this.effect.eyeSeparation = 100, this.effect.setSize(window.innerWidth, window.innerHeight), t.e(0, function () {
						g.data = t(14), g.complete()
					})
				},
				complete: function () {
					var A = this.createSprite(this.data.bg);
					this.addScene({scene: A, max: 2400, min: -29650});
					var g = this.createScene(this.data.data1);
					g.position.set(0, 0, 0), this.addScene({scene: g, max: 2400, min: -12e3});
					var t = this.createScene(this.data.data2);
					t.position.set(0, 0, 1500), this.addScene({scene: t, max: 2400, min: -12e3});
					var e = this.createScene(this.data.data3);
					e.position.set(0, 0, 4500), this.addScene({scene: e, max: 2400, min: -12e3});
					var C = this.createSprite(this.data.bg2);
					this.addScene({scene: C, max: -12e3, min: -29650});
					var I = this.createScene(this.data.data4);
					I.position.set(0, 0, 7200), this.addScene({scene: I, max: -4900, min: -29650});
					var i = this.createScene(this.data.data5);
					i.position.set(0, 0, 8500), this.addScene({scene: i, max: -7e3, min: -29650});
					var n = this.createScene(this.data.data6);
					n.position.set(0, 0, 11e3), this.addScene({scene: n, max: -11e3, min: -29650});
					var o = this.createScene(this.data.data7);
					o.position.set(0, 0, 18e3), this.addScene({scene: o, max: -15500, min: -29650});
					var a = this.createSprite(this.data.bg3);
					this.addScene({scene: a, max: -29650, min: -43600});
					var r = this.createSprite(this.data.vr);
					this.addScene({scene: r, max: -29300, min: -43600});
					var s = this.createScene(this.data.data8);
					s.position.set(0, 0, 3e4), this.addScene({scene: s, max: -29650, min: -43600});
					var c = this.createScene(this.data.data9);
					c.position.set(0, 0, 31e3), this.addScene({scene: c, max: -36e3, min: -6e4});
					var h = this.createScene(this.data.data10);
					h.position.set(0, 0, 46e3);
					var l = this.createParticles(this.data.red, 80, 50, 1e3, .2, {x: 1, y: 1, z: 5});
					l.position.set(0, 300, 5e3), h.add(l), this.addScene({scene: h, max: -42e3, min: -6e4});
					var u = this.createScene(this.data.data11);
					u.position.set(0, 0, 56e3), this.addScene({scene: u, max: -42e3, min: -5e5});
					var d = this.createScene(this.data.data12);
					d.position.set(0, 0, 61e3), this.addScene({scene: d, max: -29650, min: -5e5});
					var p = this.createScene(this.data.data13);
					p.position.set(0, 0, 73e3), this.addScene({
						scene: p,
						max: -71e3,
						min: -5e5
					}), this.dots = this.createScene(this.data.data14), this.dots.position.set(0, 0, 0), this.addScene({
						scene: this.dots,
						max: 0,
						min: -5e5
					})
				},
				tap: function (A) {
					this.mouse.x = A.x / window.innerWidth * 2 - 1, this.mouse.y = 2 * -(A.y / window.innerHeight) + 1, this.raycaster.setFromCamera(this.mouse, this.camera);
					var g = this.raycaster.intersectObjects(this.dots.children);
					g.length > 0 && (g[0].object.name < 11 ? this.trigger("dot", g[0].object.name) : 11 == g[0].object.name && this.trigger("share"))
				},
				preloadData: {max: 0, cur: 0},
				checkPreload: function () {
					this.trigger("preloadProgress", Math.floor(this.preloadData.cur / this.preloadData.max * 100)), this.preloadData.cur >= this.preloadData.max && this.preloadOff()
				},
				preloadOn: function () {
					function A(A) {
						if (A.n0 > 10) {
							var t = g(700, 900);
							A.position.set(t.x, t.y, 0), A.material.rotation = t.r + Math.PI / 2;
							var e = .4 * Math.random() + .2;
							A.scale.set(A.w0 * e, A.h0 * e, 1)
						} else {
							var t = g(200, 500);
							A.position.set(t.x, t.y, 0), A.material.rotation = Math.random() * Math.PI;
							var e = 1 * Math.random() + .5;
							A.scale.set(A.w0 * e, A.h0 * e, 1)
						}
					}

					function g(A, g) {
						var t = C.random(A, g), e = Math.random() * Math.PI * 2, I = Math.sin(e) * t, i = Math.cos(e) * t;
						return {x: i, y: I, r: e}
					}

					I.ga(I.PAGE, "loading", "loading_scene"), C.isPreloaded = !1, $.each(this.preload.children, function (g, t) {
						0 == g && e.fromTo(t.scale, .01, {x: 1 * t.w0, y: 1 * t.h0}, {
							x: 1.1 * t.w0,
							y: 1.1 * t.h0,
							yoyo: !0,
							repeat: -1,
							onUpdate: function () {
								t.material.rotation = .1 * Math.random() - .2
							}
						}), g <= 1 || (A(t), e.fromTo(t.position, t.t0, {z: 500}, {
							z: -2e4,
							delay: t.i0 * (t.t0 / t.n0),
							repeat: -1,
							onRepeat: function () {
								A(t)
							}
						}))
					}), this.trigger("preloadOn")
				},
				preloadOff: function () {
					var A = this;
					C.isPreloaded = !0, e.to(this.root.position, 4, {
						z: -11500, ease: e.Quad.InOut, onEnd: function () {
							$.each(A.preload.children, function (A, g) {
								e.kill(g)
							}), A.root.remove(A.preload), e.to(this.target, 3, {
								z: 400, ease: e.Quad.In, onEnd: function () {
									C.isReady = !0, A.trigger("ready")
								}
							})
						}
					}), this.trigger("preloadOff")
				},
				createPreload: function (A) {
					for (var g = new THREE.Group, t = 0, e = A.length; t < e; t++)for (var C = A[t].n || 1, I = 0; I < C; I++) {
						var i = (new THREE.TextureLoader).load(A[t].url), n = new THREE.SpriteMaterial({map: i}), o = (A[t].turn ? -1 : 1) * A[t].w * (A[t].s || 1), a = A[t].h * (A[t].s || 1), r = new THREE.Sprite(n);
						r.position.set(A[t].x, A[t].y, A[t].z), r.scale.set(o, a, 1), r.w0 = o, r.h0 = a, r.t0 = A[t].t, r.n0 = A[t].n, r.i0 = I, A[t].r && (r.material.rotation = A[t].r / 180 * Math.PI), A[t].name && (r.name = A[t].name), g.add(r)
					}
					return g
				},
				createScene: function (A) {
					var g = this, t = new THREE.Group;
					t.childs = [];
					for (var e = 0, C = A.length; e < C; e++) {
						this.preloadData.max++;
						var I = (new THREE.TextureLoader).load(A[e].url, function () {
							g.preloadData.cur++, g.checkPreload()
						}), i = new THREE.SpriteMaterial({map: I}), n = new THREE.Sprite(i);
						if (n.position.set(A[e].x, A[e].y, A[e].z), n.scale.set((A[e].turn ? -1 : 1) * A[e].w * (A[e].s || 1), A[e].h * (A[e].s || 1), 1), A[e].r && (n.material.rotation = A[e].r / 180 * Math.PI), A[e].name && (n.name = A[e].name), t.add(n), n.isIn = !0, t.childs.push(n), !A[e].single) {
							var o = new THREE.Sprite(i);
							o.position.set(-A[e].x, A[e].y, A[e].z), o.scale.set(-A[e].w * (A[e].s || 1), A[e].h * (A[e].s || 1), 1), t.add(o), o.isIn = !0, t.childs.push(o)
						}
						A[e].walk && (A[e].walk.target = n, this.addWalk(A[e].walk))
					}
					return t
				},
				createSprite: function (A) {
					var g = new THREE.SpriteMaterial({map: (new THREE.TextureLoader).load(A.url)}), t = new THREE.Sprite(g);
					return t.position.set(A.x, A.y, A.z), t.scale.set(A.w * (A.s || 1), A.h * (A.s || 1), 1), t
				},
				createParticles: function (A, g, t, e, C, I) {
					for (var i = new THREE.Group, n = [], o = 0, a = A.length; o < a; o++)n[o] = new THREE.SpriteMaterial({map: (new THREE.TextureLoader).load(A[o].url)});
					for (var r = 0; r < g; r++) {
						var s = r % a, c = new THREE.Sprite(n[s]), h = Math.random() * (e - t) + t, l = Math.random() * Math.PI * 2, u = Math.random() * Math.PI * 2, d = Math.sin(u) * h, p = Math.cos(u) * h, f = Math.cos(l) * p, E = Math.sin(l) * p;
						c.position.set(f * I.x, d * I.y, E * I.z);
						var w = 2 * Math.random() + 1;
						c.scale.set(A[s].w * w * C, A[s].h * w * C, 1), i.add(c)
					}
					return i
				},
				resize: function () {
					C.checkLandscape() ? (this.camera.aspect = window.innerWidth / window.innerHeight, this.camera.updateProjectionMatrix(), this.effect.setSize(window.innerWidth, window.innerHeight), this.renderer.setSize(window.innerWidth, window.innerHeight)) : C.isVR ? (this.camera.aspect = window.innerHeight / window.innerWidth, this.camera.updateProjectionMatrix(), this.effect.setSize(window.innerHeight, window.innerWidth), this.renderer.setSize(window.innerHeight, window.innerWidth)) : (this.camera.aspect = window.innerWidth / window.innerHeight, this.camera.updateProjectionMatrix(), this.effect.setSize(window.innerWidth, window.innerHeight), this.renderer.setSize(window.innerWidth, window.innerHeight))
				},
				render: function () {
					if (C.isActive) {
						var A;
						A = this.root.position.z < -44e3 ? this.aim.z * Math.max(1, (-this.root.position.z - 4e4) / 1e4) : this.aim.z, C.isReady && (this.root.position.z > 200 && A > 0 && (A *= 1 - (this.root.position.z - 200) / 200), this.root.position.z < -168e3 && A < 0 && (A *= 1 - (-this.root.position.z - 168e3) / 8e3), this.root.position.z += A), this.root.position.z < -20200 && (C.isFirst || (C.isFirst = !0, e.to(this.dots.childs[11].material, .5, {
							opacity: 0,
							delay: 5
						}))), this.updateWalk(this.root.position.z), this.updateScene(this.root.position.z), this.camera.rotation.x += .3 * (this.fix.y - this.camera.rotation.x), this.camera.rotation.y += .3 * (this.fix.x - this.camera.rotation.y), C.checkLandscape() || C.isVR ? this.effect.render(this.scene, this.camera) : this.renderer.render(this.scene, this.camera)
					}
				},
				walks: [],
				addWalk: function (A) {
					this.walks.push(A)
				},
				updateWalk: function (A) {
					$.each(this.walks, function (g, t) {
						var C = Math.max(t.from.a, t.to.a), I = Math.min(t.from.a, t.to.a);
						if (A > I && A < C)for (var g in t.from) {
							switch (g) {
								case"x":
								case"y":
								case"z":
								case"w":
								case"h":
								case"r":
									var i = (A - t.from.a) / (t.to.a - t.from.a), n = t.to.ease || e.Linear.None, o = n(i), a = t.from[g] + (t.to[g] - t.from[g]) * o
							}
							switch (g) {
								case"x":
								case"y":
								case"z":
									t.target.position[g] = a;
									break;
								case"w":
									t.target.scale.x = a;
								case"h":
									t.target.scale.y = a;
									break;
								case"r":
									t.target.material.rotation = a / 180 * Math.PI
							}
						}
					})
				},
				scenes: [],
				addScene: function (A) {
					this.scenes.push(A), this.root.add(A.scene), A.isIn = !0
				},
				updateScene: function (A) {
					var g = this;
					$.each(this.scenes, function (t, e) {
						var C = Math.max(e.max, e.min), I = Math.min(e.max, e.min);
						A > I && A < C ? e.isIn || (e.isIn = !0, g.root.add(e.scene)) : e.isIn && (e.isIn = !1, g.root.remove(e.scene))
					})
				},
				animate: function () {
					i.render(), requestAnimationFrame(i.animate)
				},
				toDot: function (A) {
					this.aim.z = 0;
					var g = this.dots.childs[A - 1], t = -g.position.z - 300, C = Math.min(3, Math.abs(this.root.position.z - t) / 1e4);
					e.kill(this.root), e.to(this.root.position, C, {z: t, ease: e.Quad.InOut})
				},
				checkVR: function () {
					this.resize()
				}
			});
			A.exports = i
		}).call(g, t(1), t(2))
	}, 35: function (A, g) {
		THREE.StereoEffect = function (A) {
			var g = new THREE.StereoCamera;
			g.aspect = .5, this.setEyeSeparation = function (A) {
				g.eyeSep = A
			}, this.setSize = function (g, t) {
				A.setSize(g, t)
			}, this.render = function (t, e) {
				t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), g.update(e);
				var C = A.getSize();
				A.setScissorTest(!0), A.clear(), A.setScissor(0, 0, C.width / 2, C.height), A.setViewport(0, 0, C.width / 2, C.height), A.render(t, g.cameraL), A.setScissor(C.width / 2, 0, C.width / 2, C.height), A.setViewport(C.width / 2, 0, C.width / 2, C.height), A.render(t, g.cameraR), A.setScissorTest(!1)
			}
		}
	}, 36: function (A, g, t) {
		var e, C;
		(function (t) {/*!
		 * VERSION: 0.1.0
		 * DATE: 2015-12-20
		 * GIT:https://github.com/shrekshrek/orienter
		 *
		 * @author: Shrek.wang, shrekshrek@gmail.com
		 **/
			!function (I) {
				var i = "object" == typeof self && self.self == self && self || "object" == typeof t && t.global == t && t;
				e = [g], C = function (A) {
					i.Orienter = I(i, A)
				}.apply(g, e), !(void 0 !== C && (A.exports = C))
			}(function (A, g) {
				function t(A, g) {
					for (var t in g)A[t] = g[t]
				}

				return g = function () {
					this.initialize.apply(this, arguments)
				}, t(g.prototype, {
					lon: 0, lat: 0, direction: 0, fix: 0, os: "", initialize: function () {
						switch (this.lon = 0, this.lat = 0, this.direction = window.orientation || 0, this.direction) {
							case 0:
								this.fix = 0;
								break;
							case 90:
								this.fix = -270;
								break;
							case-90:
								this.fix = -90
						}
						navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) ? this.os = "ios" : this.os = navigator.userAgent.indexOf("Android") > -1 || navigator.userAgent.indexOf("Linux") ? "android" : ""
					}, init: function () {
						this._orient = this.orientHandler.bind(this), window.addEventListener("deviceorientation", this._orient, !1), this._change = this.changeHandler.bind(this), window.addEventListener("orientationchange", this._change, !1)
					}, destroy: function () {
						window.removeEventListener("deviceorientation", this._orient, !1), window.removeEventListener("orientationchange", this._change, !1)
					}, changeHandler: function (A) {
						this.direction = window.orientation, this.change && this.change(this.direction)
					}, changeDirectionTo: function (A) {
						this.direction = A
					}, orientHandler: function (A) {
						switch (this.os) {
							case"ios":
								switch (this.direction) {
									case 0:
										this.lon = A.alpha + A.gamma, A.beta > 0 && (this.lat = A.beta - 90);
										break;
									case 90:
										A.gamma < 0 ? this.lon = A.alpha - 90 : this.lon = A.alpha - 270, A.gamma > 0 ? this.lat = 90 - A.gamma : this.lat = -90 - A.gamma;
										break;
									case-90:
										A.gamma < 0 ? this.lon = A.alpha - 90 : this.lon = A.alpha - 270, A.gamma < 0 ? this.lat = 90 + A.gamma : this.lat = -90 + A.gamma
								}
								break;
							case"android":
								switch (this.direction) {
									case 0:
										this.lon = A.alpha + A.gamma + 30, A.gamma > 90 ? this.lat = 90 - A.beta : this.lat = A.beta - 90;
										break;
									case 90:
										this.lon = A.alpha - 230, A.gamma > 0 ? this.lat = 270 - A.gamma : this.lat = -90 - A.gamma;
										break;
									case-90:
										this.lon = A.alpha - 180, this.lat = -90 + A.gamma
								}
						}
						this.lon += this.fix, this.lon %= 360, this.lon < 0 && (this.lon += 360), this.lon = Math.round(this.lon), this.lat = Math.round(this.lat), this.orient && this.orient.apply(this, [{
							a: Math.round(A.alpha),
							b: Math.round(A.beta),
							g: Math.round(A.gamma),
							lon: this.lon,
							lat: this.lat,
							dir: this.direction
						}])
					}
				}), g
			})
		}).call(g, function () {
			return this
		}())
	}, 37: function (A, g) {
		THREE.SpriteCanvasMaterial = function (A) {
			THREE.Material.call(this), this.type = "SpriteCanvasMaterial", this.color = new THREE.Color(16777215), this.program = function (A, g) {
			}, this.setValues(A)
		}, THREE.SpriteCanvasMaterial.prototype = Object.create(THREE.Material.prototype), THREE.SpriteCanvasMaterial.prototype.constructor = THREE.SpriteCanvasMaterial, THREE.SpriteCanvasMaterial.prototype.clone = function () {
			var A = new THREE.SpriteCanvasMaterial;
			return A.copy(this), A.color.copy(this.color), A.program = this.program, A
		}, THREE.CanvasRenderer = function (A) {
			function g() {
				pA.setRGB(0, 0, 0), fA.setRGB(0, 0, 0), EA.setRGB(0, 0, 0);
				for (var A = 0, g = v.length; A < g; A++) {
					var t = v[A], e = t.color;
					t instanceof THREE.AmbientLight ? pA.add(e) : t instanceof THREE.DirectionalLight ? fA.add(e) : t instanceof THREE.PointLight && EA.add(e)
				}
			}

			function t(A, g, t) {
				for (var e = 0, C = v.length; e < C; e++) {
					var I = v[e];
					if (cA.copy(I.color), I instanceof THREE.DirectionalLight) {
						var i = wA.setFromMatrixPosition(I.matrixWorld).normalize(), n = g.dot(i);
						if (n <= 0)continue;
						n *= I.intensity, t.add(cA.multiplyScalar(n))
					} else if (I instanceof THREE.PointLight) {
						var i = wA.setFromMatrixPosition(I.matrixWorld), n = g.dot(wA.subVectors(i, A).normalize());
						if (n <= 0)continue;
						if (n *= 0 == I.distance ? 1 : 1 - Math.min(A.distanceTo(i) / I.distance, 1), 0 == n)continue;
						n *= I.intensity, t.add(cA.multiplyScalar(n))
					}
				}
			}

			function e(A, g, t) {
				c(t.opacity), h(t.blending);
				var e = g.scale.x * N, C = g.scale.y * W, I = .5 * Math.sqrt(e * e + C * C);
				if (dA.min.set(A.x - I, A.y - I), dA.max.set(A.x + I, A.y + I), t instanceof THREE.SpriteMaterial) {
					var i = t.map;
					if (null !== i) {
						var n = hA[i.id];
						if (void 0 !== n && n.version === i.version || (n = a(i), hA[i.id] = n), void 0 !== n.canvas) {
							f(n.canvas);
							var o = i.image, r = o.width * i.offset.x, s = o.height * i.offset.y, l = o.width * i.repeat.x, u = o.height * i.repeat.y, d = e / l, E = C / u;
							_.save(), _.translate(A.x, A.y), 0 !== t.rotation && _.rotate(t.rotation), _.translate(-e / 2, -C / 2), _.scale(d, E), _.translate(-r, -s), _.fillRect(r, s, l, u), _.restore()
						}
					} else f(t.color.getStyle()), _.save(), _.translate(A.x, A.y), 0 !== t.rotation && _.rotate(t.rotation), _.scale(e, -C), _.fillRect(-.5, -.5, 1, 1), _.restore()
				} else t instanceof THREE.SpriteCanvasMaterial && (p(t.color.getStyle()), f(t.color.getStyle()), _.save(), _.translate(A.x, A.y), 0 !== t.rotation && _.rotate(t.rotation), _.scale(e, C), t.program(_), _.restore())
			}

			function C(A, g, t, e) {
				if (c(e.opacity), h(e.blending), _.beginPath(), _.moveTo(A.positionScreen.x, A.positionScreen.y), _.lineTo(g.positionScreen.x, g.positionScreen.y), e instanceof THREE.LineBasicMaterial) {
					if (l(e.linewidth), u(e.linecap), d(e.linejoin), e.vertexColors !== THREE.VertexColors)p(e.color.getStyle()); else {
						var C = t.vertexColors[0].getStyle(), I = t.vertexColors[1].getStyle();
						if (C === I)p(C); else {
							try {
								var i = _.createLinearGradient(A.positionScreen.x, A.positionScreen.y, g.positionScreen.x, g.positionScreen.y);
								i.addColorStop(0, C), i.addColorStop(1, I)
							} catch (n) {
								i = C
							}
							p(i)
						}
					}
					_.stroke(), dA.expandByScalar(2 * e.linewidth)
				} else e instanceof THREE.LineDashedMaterial && (l(e.linewidth), u(e.linecap), d(e.linejoin), p(e.color.getStyle()), E([e.dashSize, e.gapSize]), _.stroke(), dA.expandByScalar(2 * e.linewidth), E([]))
			}

			function I(A, g, e, C, I, a, s, l) {
				if (z.info.render.vertices += 3, z.info.render.faces++, c(l.opacity), h(l.blending), B = A.positionScreen.x, y = A.positionScreen.y, b = g.positionScreen.x, T = g.positionScreen.y, Q = e.positionScreen.x, D = e.positionScreen.y, i(B, y, b, T, Q, D), (l instanceof THREE.MeshLambertMaterial || l instanceof THREE.MeshPhongMaterial) && null === l.map)rA.copy(l.color), sA.copy(l.emissive), l.vertexColors === THREE.FaceColors && rA.multiply(s.color), aA.copy(pA), mA.copy(A.positionWorld).add(g.positionWorld).add(e.positionWorld).divideScalar(3), t(mA, s.normalModel, aA), aA.multiply(rA).add(sA), l.wireframe === !0 ? n(aA, l.wireframeLinewidth, l.wireframeLinecap, l.wireframeLinejoin) : o(aA); else if (l instanceof THREE.MeshBasicMaterial || l instanceof THREE.MeshLambertMaterial || l instanceof THREE.MeshPhongMaterial)if (null !== l.map) {
					var u = l.map.mapping;
					u === THREE.UVMapping && (O = s.uvs, r(B, y, b, T, Q, D, O[C].x, O[C].y, O[I].x, O[I].y, O[a].x, O[a].y, l.map))
				} else null !== l.envMap ? l.envMap.mapping === THREE.SphericalReflectionMapping && (vA.copy(s.vertexNormalsModel[C]).applyMatrix3(VA), H = .5 * vA.x + .5, G = .5 * vA.y + .5, vA.copy(s.vertexNormalsModel[I]).applyMatrix3(VA), q = .5 * vA.x + .5, S = .5 * vA.y + .5, vA.copy(s.vertexNormalsModel[a]).applyMatrix3(VA), k = .5 * vA.x + .5, j = .5 * vA.y + .5, r(B, y, b, T, Q, D, H, G, q, S, k, j, l.envMap)) : (aA.copy(l.color), l.vertexColors === THREE.FaceColors && aA.multiply(s.color), l.wireframe === !0 ? n(aA, l.wireframeLinewidth, l.wireframeLinecap, l.wireframeLinejoin) : o(aA)); else l instanceof THREE.MeshNormalMaterial ? (vA.copy(s.normalModel).applyMatrix3(VA), aA.setRGB(vA.x, vA.y, vA.z).multiplyScalar(.5).addScalar(.5), l.wireframe === !0 ? n(aA, l.wireframeLinewidth, l.wireframeLinecap, l.wireframeLinejoin) : o(aA)) : (aA.setRGB(1, 1, 1), l.wireframe === !0 ? n(aA, l.wireframeLinewidth, l.wireframeLinecap, l.wireframeLinejoin) : o(aA))
			}

			function i(A, g, t, e, C, I) {
				_.beginPath(), _.moveTo(A, g), _.lineTo(t, e), _.lineTo(C, I), _.closePath()
			}

			function n(A, g, t, e) {
				l(g), u(t), d(e), p(A.getStyle()), _.stroke(), dA.expandByScalar(2 * g)
			}

			function o(A) {
				f(A.getStyle()), _.fill()
			}

			function a(A) {
				if (0 === A.version || A instanceof THREE.CompressedTexture || A instanceof THREE.DataTexture)return {
					canvas: void 0,
					version: A.version
				};
				var g = A.image;
				if (g.complete === !1)return {canvas: void 0, version: 0};
				var t = document.createElement("canvas");
				t.width = g.width, t.height = g.height;
				var e = t.getContext("2d");
				e.setTransform(1, 0, 0, -1, 0, g.height), e.drawImage(g, 0, 0);
				var C = A.wrapS === THREE.RepeatWrapping, I = A.wrapT === THREE.RepeatWrapping, i = "no-repeat";
				C === !0 && I === !0 ? i = "repeat" : C === !0 ? i = "repeat-x" : I === !0 && (i = "repeat-y");
				var n = _.createPattern(t, i);
				return A.onUpdate && A.onUpdate(A), {canvas: n, version: A.version}
			}

			function r(A, g, t, e, C, I, i, n, o, r, s, c, h) {
				var l = hA[h.id];
				if (void 0 !== l && l.version === h.version || (l = a(h), hA[h.id] = l), void 0 === l.canvas)return f("rgba( 0, 0, 0, 1)"), void _.fill();
				f(l.canvas);
				var u, d, p, E, w, m, v, V, M = h.offset.x / h.repeat.x, x = h.offset.y / h.repeat.y, R = h.image.width * h.repeat.x, B = h.image.height * h.repeat.y;
				i = (i + M) * R, n = (n + x) * B, o = (o + M) * R, r = (r + x) * B, s = (s + M) * R, c = (c + x) * B, t -= A, e -= g, C -= A, I -= g, o -= i, r -= n, s -= i, c -= n, v = o * c - s * r, 0 !== v && (V = 1 / v, u = (c * t - r * C) * V, d = (c * e - r * I) * V, p = (o * C - s * t) * V, E = (o * I - s * e) * V, w = A - u * i - p * n, m = g - d * i - E * n, _.save(), _.transform(u, d, p, E, w, m), _.fill(), _.restore())
			}

			function s(A, g, t) {
				var e, C = g.x - A.x, I = g.y - A.y, i = C * C + I * I;
				0 !== i && (e = t / Math.sqrt(i), C *= e, I *= e, g.x += C, g.y += I, A.x -= C, A.y -= I)
			}

			function c(A) {
				gA !== A && (_.globalAlpha = A, gA = A)
			}

			function h(A) {
				tA !== A && (A === THREE.NormalBlending ? _.globalCompositeOperation = "source-over" : A === THREE.AdditiveBlending ? _.globalCompositeOperation = "lighter" : A === THREE.SubtractiveBlending ? _.globalCompositeOperation = "darker" : A === THREE.MultiplyBlending && (_.globalCompositeOperation = "multiply"), tA = A)
			}

			function l(A) {
				IA !== A && (_.lineWidth = A, IA = A)
			}

			function u(A) {
				iA !== A && (_.lineCap = A, iA = A)
			}

			function d(A) {
				nA !== A && (_.lineJoin = A, nA = A)
			}

			function p(A) {
				eA !== A && (_.strokeStyle = A, eA = A)
			}

			function f(A) {
				CA !== A && (_.fillStyle = A, CA = A)
			}

			function E(A) {
				oA.length !== A.length && (_.setLineDash(A), oA = A)
			}

			console.log("THREE.CanvasRenderer", THREE.REVISION), A = A || {};
			var w, m, v, V, M, x, R, B, y, b, T, Q, D, O, H, G, q, S, k, j, z = this, U = new THREE.Projector, P = void 0 !== A.canvas ? A.canvas : document.createElement("canvas"), Y = P.width, F = P.height, N = Math.floor(Y / 2), W = Math.floor(F / 2), J = 0, L = 0, Z = Y, K = F, X = 1, _ = P.getContext("2d", {alpha: A.alpha === !0}), $ = new THREE.Color(0), AA = A.alpha === !0 ? 0 : 1, gA = 1, tA = 0, eA = null, CA = null, IA = null, iA = null, nA = null, oA = [], aA = (new THREE.RenderableVertex, new THREE.RenderableVertex, new THREE.Color), rA = (new THREE.Color, new THREE.Color, new THREE.Color, new THREE.Color, new THREE.Color), sA = new THREE.Color, cA = new THREE.Color, hA = {}, lA = new THREE.Box2, uA = new THREE.Box2, dA = new THREE.Box2, pA = new THREE.Color, fA = new THREE.Color, EA = new THREE.Color, wA = new THREE.Vector3, mA = new THREE.Vector3, vA = new THREE.Vector3, VA = new THREE.Matrix3;
			void 0 === _.setLineDash && (_.setLineDash = function () {
			}), this.domElement = P, this.autoClear = !0, this.sortObjects = !0, this.sortElements = !0, this.info = {
				render: {
					vertices: 0,
					faces: 0
				}
			}, this.supportsVertexTextures = function () {
			}, this.setFaceCulling = function () {
			}, this.getContext = function () {
				return _
			}, this.getContextAttributes = function () {
				return _.getContextAttributes()
			}, this.getPixelRatio = function () {
				return X
			}, this.setPixelRatio = function (A) {
				void 0 !== A && (X = A)
			}, this.setSize = function (A, g, t) {
				Y = A * X, F = g * X, P.width = Y, P.height = F, N = Math.floor(Y / 2), W = Math.floor(F / 2), t !== !1 && (P.style.width = A + "px", P.style.height = g + "px"), lA.min.set(-N, -W), lA.max.set(N, W), uA.min.set(-N, -W), uA.max.set(N, W), gA = 1, tA = 0, eA = null, CA = null, IA = null, iA = null, nA = null, this.setViewport(0, 0, A, g)
			}, this.setViewport = function (A, g, t, e) {
				J = A * X, L = g * X, Z = t * X, K = e * X
			}, this.setScissor = function () {
			}, this.setScissorTest = function () {
			}, this.setClearColor = function (A, g) {
				$.set(A), AA = void 0 !== g ? g : 1, uA.min.set(-N, -W), uA.max.set(N, W)
			}, this.setClearColorHex = function (A, g) {
				console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."), this.setClearColor(A, g)
			}, this.getClearColor = function () {
				return $
			}, this.getClearAlpha = function () {
				return AA
			}, this.getMaxAnisotropy = function () {
				return 0
			}, this.clear = function () {
				uA.isEmpty() === !1 && (uA.intersect(lA), uA.expandByScalar(2), uA.min.x = uA.min.x + N, uA.min.y = -uA.min.y + W, uA.max.x = uA.max.x + N, uA.max.y = -uA.max.y + W, AA < 1 && _.clearRect(0 | uA.min.x, 0 | uA.max.y, uA.max.x - uA.min.x | 0, uA.min.y - uA.max.y | 0), AA > 0 && (h(THREE.NormalBlending), c(1), f("rgba(" + Math.floor(255 * $.r) + "," + Math.floor(255 * $.g) + "," + Math.floor(255 * $.b) + "," + AA + ")"), _.fillRect(0 | uA.min.x, 0 | uA.max.y, uA.max.x - uA.min.x | 0, uA.min.y - uA.max.y | 0)), uA.makeEmpty())
			}, this.clearColor = function () {
			}, this.clearDepth = function () {
			}, this.clearStencil = function () {
			}, this.render = function (A, t) {
				if (t instanceof THREE.Camera == !1)return void console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
				this.autoClear === !0 && this.clear(), z.info.render.vertices = 0, z.info.render.faces = 0, _.setTransform(Z / Y, 0, 0, -K / F, J, F - L), _.translate(N, W), w = U.projectScene(A, t, this.sortObjects, this.sortElements), m = w.elements, v = w.lights, V = t, VA.getNormalMatrix(t.matrixWorldInverse), g();
				for (var i = 0, n = m.length; i < n; i++) {
					var o = m[i], a = o.material;
					if (void 0 !== a && 0 !== a.opacity) {
						if (dA.makeEmpty(), o instanceof THREE.RenderableSprite)M = o, M.x *= N, M.y *= W, e(M, o, a); else if (o instanceof THREE.RenderableLine)M = o.v1, x = o.v2, M.positionScreen.x *= N, M.positionScreen.y *= W, x.positionScreen.x *= N, x.positionScreen.y *= W, dA.setFromPoints([M.positionScreen, x.positionScreen]), lA.intersectsBox(dA) === !0 && C(M, x, o, a); else if (o instanceof THREE.RenderableFace) {
							if (M = o.v1, x = o.v2, R = o.v3, M.positionScreen.z < -1 || M.positionScreen.z > 1)continue;
							if (x.positionScreen.z < -1 || x.positionScreen.z > 1)continue;
							if (R.positionScreen.z < -1 || R.positionScreen.z > 1)continue;
							M.positionScreen.x *= N, M.positionScreen.y *= W, x.positionScreen.x *= N, x.positionScreen.y *= W, R.positionScreen.x *= N, R.positionScreen.y *= W, a.overdraw > 0 && (s(M.positionScreen, x.positionScreen, a.overdraw), s(x.positionScreen, R.positionScreen, a.overdraw), s(R.positionScreen, M.positionScreen, a.overdraw)), dA.setFromPoints([M.positionScreen, x.positionScreen, R.positionScreen]), lA.intersectsBox(dA) === !0 && I(M, x, R, 0, 1, 2, o, a)
						}
						uA.union(dA)
					}
				}
				_.setTransform(1, 0, 0, 1, 0, 0)
			}
		}
	}, 38: function (A, g) {
		THREE.RenderableObject = function () {
			this.id = 0, this.object = null, this.z = 0, this.renderOrder = 0
		}, THREE.RenderableFace = function () {
			this.id = 0, this.v1 = new THREE.RenderableVertex, this.v2 = new THREE.RenderableVertex, this.v3 = new THREE.RenderableVertex, this.normalModel = new THREE.Vector3, this.vertexNormalsModel = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3], this.vertexNormalsLength = 0, this.color = new THREE.Color, this.material = null, this.uvs = [new THREE.Vector2, new THREE.Vector2, new THREE.Vector2], this.z = 0, this.renderOrder = 0
		}, THREE.RenderableVertex = function () {
			this.position = new THREE.Vector3, this.positionWorld = new THREE.Vector3, this.positionScreen = new THREE.Vector4, this.visible = !0
		}, THREE.RenderableVertex.prototype.copy = function (A) {
			this.positionWorld.copy(A.positionWorld), this.positionScreen.copy(A.positionScreen)
		}, THREE.RenderableLine = function () {
			this.id = 0, this.v1 = new THREE.RenderableVertex, this.v2 = new THREE.RenderableVertex, this.vertexColors = [new THREE.Color, new THREE.Color], this.material = null, this.z = 0, this.renderOrder = 0
		}, THREE.RenderableSprite = function () {
			this.id = 0, this.object = null, this.x = 0, this.y = 0, this.z = 0, this.rotation = 0, this.scale = new THREE.Vector2, this.material = null, this.renderOrder = 0
		}, THREE.Projector = function () {
			function A() {
				if (o === E) {
					var A = new THREE.RenderableObject;
					return f.push(A), E++, o++, A
				}
				return f[o++]
			}

			function g() {
				if (r === m) {
					var A = new THREE.RenderableVertex;
					return w.push(A), m++, r++, A
				}
				return w[r++]
			}

			function t() {
				if (c === V) {
					var A = new THREE.RenderableFace;
					return v.push(A), V++, c++, A
				}
				return v[c++]
			}

			function e() {
				if (l === x) {
					var A = new THREE.RenderableLine;
					return M.push(A), x++, l++, A
				}
				return M[l++]
			}

			function C() {
				if (d === B) {
					var A = new THREE.RenderableSprite;
					return R.push(A), B++, d++, A
				}
				return R[d++]
			}

			function I(A, g) {
				return A.renderOrder !== g.renderOrder ? A.renderOrder - g.renderOrder : A.z !== g.z ? g.z - A.z : A.id !== g.id ? A.id - g.id : 0
			}

			function i(A, g) {
				var t = 0, e = 1, C = A.z + A.w, I = g.z + g.w, i = -A.z + A.w, n = -g.z + g.w;
				return C >= 0 && I >= 0 && i >= 0 && n >= 0 || !(C < 0 && I < 0 || i < 0 && n < 0) && (C < 0 ? t = Math.max(t, C / (C - I)) : I < 0 && (e = Math.min(e, C / (C - I))), i < 0 ? t = Math.max(t, i / (i - n)) : n < 0 && (e = Math.min(e, i / (i - n))), !(e < t) && (A.lerp(g, t), g.lerp(A, 1 - e), !0))
			}

			var n, o, a, r, s, c, h, l, u, d, p, f = [], E = 0, w = [], m = 0, v = [], V = 0, M = [], x = 0, R = [], B = 0, y = {
				objects: [],
				lights: [],
				elements: []
			}, b = new THREE.Vector3, T = new THREE.Vector4, Q = new THREE.Box3(new THREE.Vector3((-1), (-1), (-1)), new THREE.Vector3(1, 1, 1)), D = new THREE.Box3, O = new Array(3), H = (new Array(4), new THREE.Matrix4), G = new THREE.Matrix4, q = new THREE.Matrix4, S = new THREE.Matrix3, k = new THREE.Frustum, j = new THREE.Vector4, z = new THREE.Vector4;
			this.projectVector = function (A, g) {
				console.warn("THREE.Projector: .projectVector() is now vector.project()."), A.project(g)
			}, this.unprojectVector = function (A, g) {
				console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."), A.unproject(g)
			}, this.pickingRay = function (A, g) {
				console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")
			};
			var U = function () {
				function A(A) {
					f = A, E = f.material, m.getNormalMatrix(f.matrixWorld), u.length = 0, d.length = 0
				}

				function C(A) {
					var g = A.position, t = A.positionWorld, e = A.positionScreen;
					t.copy(g).applyMatrix4(p), e.copy(t).applyMatrix4(G);
					var C = 1 / e.w;
					e.x *= C, e.y *= C, e.z *= C, A.visible = e.x >= -1 && e.x <= 1 && e.y >= -1 && e.y <= 1 && e.z >= -1 && e.z <= 1
				}

				function I(A, t, e) {
					a = g(), a.position.set(A, t, e), C(a)
				}

				function i(A, g, t) {
					u.push(A, g, t)
				}

				function n(A, g) {
					d.push(A, g)
				}

				function o(A, g, t) {
					return A.visible === !0 || g.visible === !0 || t.visible === !0 || (O[0] = A.positionScreen, O[1] = g.positionScreen, O[2] = t.positionScreen, Q.intersectsBox(D.setFromPoints(O)))
				}

				function r(A, g, t) {
					return (t.positionScreen.x - A.positionScreen.x) * (g.positionScreen.y - A.positionScreen.y) - (t.positionScreen.y - A.positionScreen.y) * (g.positionScreen.x - A.positionScreen.x) < 0
				}

				function c(A, g) {
					var t = w[A], C = w[g];
					h = e(), h.id = f.id, h.v1.copy(t), h.v2.copy(C), h.z = (t.positionScreen.z + C.positionScreen.z) / 2, h.renderOrder = f.renderOrder, h.material = f.material, y.elements.push(h)
				}

				function l(A, g, e) {
					var C = w[A], I = w[g], i = w[e];
					if (o(C, I, i) !== !1 && (E.side === THREE.DoubleSide || r(C, I, i) === !0)) {
						s = t(), s.id = f.id, s.v1.copy(C), s.v2.copy(I), s.v3.copy(i), s.z = (C.positionScreen.z + I.positionScreen.z + i.positionScreen.z) / 3, s.renderOrder = f.renderOrder, s.normalModel.fromArray(u, 3 * A), s.normalModel.applyMatrix3(m).normalize();
						for (var n = 0; n < 3; n++) {
							var a = s.vertexNormalsModel[n];
							a.fromArray(u, 3 * arguments[n]), a.applyMatrix3(m).normalize();
							var c = s.uvs[n];
							c.fromArray(d, 2 * arguments[n])
						}
						s.vertexNormalsLength = 3, s.material = f.material, y.elements.push(s)
					}
				}

				var u = [], d = [], f = null, E = null, m = new THREE.Matrix3;
				return {
					setObject: A,
					projectVertex: C,
					checkTriangleVisibility: o,
					checkBackfaceCulling: r,
					pushVertex: I,
					pushNormal: i,
					pushUv: n,
					pushLine: c,
					pushTriangle: l
				}
			}, P = new U;
			this.projectScene = function (a, f, E, m) {
				function v(g) {
					n = A(), n.id = g.id, n.object = g, b.setFromMatrixPosition(g.matrixWorld), b.applyProjection(G), n.z = b.z, n.renderOrder = g.renderOrder, y.objects.push(n)
				}

				c = 0, l = 0, d = 0, y.elements.length = 0, a.autoUpdate === !0 && a.updateMatrixWorld(), null === f.parent && f.updateMatrixWorld(), H.copy(f.matrixWorldInverse.getInverse(f.matrixWorld)), G.multiplyMatrices(f.projectionMatrix, H), k.setFromMatrix(G), o = 0, y.objects.length = 0, y.lights.length = 0, a.traverseVisible(function (A) {
					if (A instanceof THREE.Light)y.lights.push(A); else if (A instanceof THREE.Mesh || A instanceof THREE.Line) {
						if (A.material.visible === !1)return;
						if (A.frustumCulled === !0 && k.intersectsObject(A) === !1)return;
						v(A)
					} else if (A instanceof THREE.Sprite) {
						if (A.material.visible === !1)return;
						if (A.frustumCulled === !0 && k.intersectsSprite(A) === !1)return;
						v(A)
					}
				}), E === !0 && y.objects.sort(I);
				for (var V = 0, M = y.objects.length; V < M; V++) {
					var x = y.objects[V].object, R = x.geometry;
					if (P.setObject(x), p = x.matrixWorld, r = 0, x instanceof THREE.Mesh) {
						if (R instanceof THREE.BufferGeometry) {
							var B = R.attributes, Q = R.groups;
							if (void 0 === B.position)continue;
							for (var D = B.position.array, O = 0, U = D.length; O < U; O += 3)P.pushVertex(D[O], D[O + 1], D[O + 2]);
							if (void 0 !== B.normal)for (var Y = B.normal.array, O = 0, U = Y.length; O < U; O += 3)P.pushNormal(Y[O], Y[O + 1], Y[O + 2]);
							if (void 0 !== B.uv)for (var F = B.uv.array, O = 0, U = F.length; O < U; O += 2)P.pushUv(F[O], F[O + 1]);
							if (null !== R.index) {
								var N = R.index.array;
								if (Q.length > 0)for (var V = 0; V < Q.length; V++)for (var W = Q[V], O = W.start, U = W.start + W.count; O < U; O += 3)P.pushTriangle(N[O], N[O + 1], N[O + 2]); else for (var O = 0, U = N.length; O < U; O += 3)P.pushTriangle(N[O], N[O + 1], N[O + 2])
							} else for (var O = 0, U = D.length / 3; O < U; O += 3)P.pushTriangle(O, O + 1, O + 2)
						} else if (R instanceof THREE.Geometry) {
							var J = R.vertices, L = R.faces, Z = R.faceVertexUvs[0];
							S.getNormalMatrix(p);
							for (var K = x.material, X = K instanceof THREE.MultiMaterial, _ = X === !0 ? x.material : null, $ = 0, AA = J.length; $ < AA; $++) {
								var gA = J[$];
								if (b.copy(gA), K.morphTargets === !0)for (var tA = R.morphTargets, eA = x.morphTargetInfluences, CA = 0, IA = tA.length; CA < IA; CA++) {
									var iA = eA[CA];
									if (0 !== iA) {
										var nA = tA[CA], oA = nA.vertices[$];
										b.x += (oA.x - gA.x) * iA, b.y += (oA.y - gA.y) * iA, b.z += (oA.z - gA.z) * iA
									}
								}
								P.pushVertex(b.x, b.y, b.z)
							}
							for (var aA = 0, rA = L.length; aA < rA; aA++) {
								var sA = L[aA];
								if (K = X === !0 ? _.materials[sA.materialIndex] : x.material, void 0 !== K) {
									var cA = K.side, hA = w[sA.a], lA = w[sA.b], uA = w[sA.c];
									if (P.checkTriangleVisibility(hA, lA, uA) !== !1) {
										var dA = P.checkBackfaceCulling(hA, lA, uA);
										if (cA !== THREE.DoubleSide) {
											if (cA === THREE.FrontSide && dA === !1)continue;
											if (cA === THREE.BackSide && dA === !0)continue
										}
										s = t(), s.id = x.id, s.v1.copy(hA), s.v2.copy(lA), s.v3.copy(uA), s.normalModel.copy(sA.normal), dA !== !1 || cA !== THREE.BackSide && cA !== THREE.DoubleSide || s.normalModel.negate(), s.normalModel.applyMatrix3(S).normalize();
										for (var pA = sA.vertexNormals, fA = 0, EA = Math.min(pA.length, 3); fA < EA; fA++) {
											var wA = s.vertexNormalsModel[fA];
											wA.copy(pA[fA]), dA !== !1 || cA !== THREE.BackSide && cA !== THREE.DoubleSide || wA.negate(), wA.applyMatrix3(S).normalize()
										}
										s.vertexNormalsLength = pA.length;
										var mA = Z[aA];
										if (void 0 !== mA)for (var vA = 0; vA < 3; vA++)s.uvs[vA].copy(mA[vA]);
										s.color = sA.color, s.material = K, s.z = (hA.positionScreen.z + lA.positionScreen.z + uA.positionScreen.z) / 3, s.renderOrder = x.renderOrder, y.elements.push(s)
									}
								}
							}
						}
					} else if (x instanceof THREE.Line) {
						if (R instanceof THREE.BufferGeometry) {
							var B = R.attributes;
							if (void 0 !== B.position) {
								for (var D = B.position.array, O = 0, U = D.length; O < U; O += 3)P.pushVertex(D[O], D[O + 1], D[O + 2]);
								if (null !== R.index)for (var N = R.index.array, O = 0, U = N.length; O < U; O += 2)P.pushLine(N[O], N[O + 1]); else for (var VA = x instanceof THREE.LineSegments ? 2 : 1, O = 0, U = D.length / 3 - 1; O < U; O += VA)P.pushLine(O, O + 1)
							}
						} else if (R instanceof THREE.Geometry) {
							q.multiplyMatrices(G, p);
							var J = x.geometry.vertices;
							if (0 === J.length)continue;
							hA = g(), hA.positionScreen.copy(J[0]).applyMatrix4(q);
							for (var VA = x instanceof THREE.LineSegments ? 2 : 1, $ = 1, AA = J.length; $ < AA; $++)hA = g(), hA.positionScreen.copy(J[$]).applyMatrix4(q), ($ + 1) % VA > 0 || (lA = w[r - 2], j.copy(hA.positionScreen), z.copy(lA.positionScreen), i(j, z) === !0 && (j.multiplyScalar(1 / j.w), z.multiplyScalar(1 / z.w), h = e(), h.id = x.id, h.v1.positionScreen.copy(j), h.v2.positionScreen.copy(z), h.z = Math.max(j.z, z.z), h.renderOrder = x.renderOrder, h.material = x.material, x.material.vertexColors === THREE.VertexColors && (h.vertexColors[0].copy(x.geometry.colors[$]), h.vertexColors[1].copy(x.geometry.colors[$ - 1])), y.elements.push(h)))
						}
					} else if (x instanceof THREE.Sprite) {
						T.set(p.elements[12], p.elements[13], p.elements[14], 1), T.applyMatrix4(G);
						var MA = 1 / T.w;
						T.z *= MA, T.z >= -1 && T.z <= 1 && (u = C(), u.id = x.id, u.x = T.x * MA, u.y = T.y * MA, u.z = T.z, u.renderOrder = x.renderOrder, u.object = x, u.rotation = x.rotation, u.scale.x = x.scale.x * Math.abs(u.x - (T.x + f.projectionMatrix.elements[0]) / (T.w + f.projectionMatrix.elements[12])), u.scale.y = x.scale.y * Math.abs(u.y - (T.y + f.projectionMatrix.elements[5]) / (T.w + f.projectionMatrix.elements[13])), u.material = x.material, y.elements.push(u))
					}
				}
				return m === !0 && y.elements.sort(I), y
			}
		}
	}, 39: function (A, g, t) {
		var e = t(26);
		"string" == typeof e && (e = [[A.id, e, ""]]);
		t(16)(e, {});
		e.locals && (A.exports = e.locals)
	}, 40: function (A, g, t) {
		var e = t(27);
		"string" == typeof e && (e = [[A.id, e, ""]]);
		t(16)(e, {});
		e.locals && (A.exports = e.locals)
	}, 47: function (A, g) {
		A.exports = "";
	}, 48: function (A, g) {
		A.exports = ""
	}, 49: function (A, g) {
		A.exports = ""
	}, 50: function (A, g) {
		A.exports = ""
	}, 51: function (A, g) {
		A.exports = ""
	}, 52: function (A, g) {
		A.exports = ""
	}, 53: function (A, g) {
		A.exports = ""
	}, 54: function (A, g) {
		A.exports = ""
	}, 55: function (A, g) {
		A.exports = ""
	}, 56: function (A, g) {
		A.exports = ""
	}, 57: function (A, g) {
		A.exports = ""
	}, 58: function (A, g) {
		A.exports = "";
	}, 59: function (A, g) {
		A.exports = ""
	}, 60: function (A, g) {
		A.exports = ""
	}, 61: function (A, g) {
		A.exports = ""
	}, 62: function (A, g) {
		A.exports = ""
	}, 63: function (A, g) {
		A.exports = ""
	}, 84: function (A, g) {
		A.exports = ""
	}, 86: function (A, g) {
		A.exports = "";
	}, 218: function (A, g) {
		A.exports = ""
	}, 219: function (A, g) {
		A.exports = ""
	}, 220: function (A, g) {
		A.exports = ""
	}, 221: function (A, g) {
		A.exports = "";
	}
});